home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / PROGREF / H221.ZIP / INTER39C.ZIP / INTERRUP.I < prev    next >
Text File  |  1994-02-06  |  322KB  |  8,500 lines

  1. Interrupt List, part 9 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------*-61---------------------------------
  4. INT 61 - reserved for user interrupt
  5. --------b-61---------------------------------
  6. INT 61 - Atari Portfolio - EXTENDED BIOS
  7.    provides subfunctions such as turning off the machine, accessing internal
  8.    variables, and mapping memory cards
  9. SeeAlso: INT 60"Atari"
  10. --------b-61---------------------------------
  11. INT 61 - HP 95LX System Manager - LOAD DS
  12. SeeAlso: INT 0F"HP 95LX",INT 60"HP 95LX"
  13. --------r-61---------------------------------
  14. INT 61 - JPI TopSPEED Modula-2 v1 - PROCEDURE EXIT TRAP
  15. SeeAlso: INT 60"JPI"
  16. --------d-61---------------------------------
  17. INT 61 - Adaptec and OMTI controllers - DRIVE 0 DATA
  18. Note:    this vector stores the second four bytes of the parameter table for
  19.       hard disk 0
  20. SeeAlso: INT 60"Adaptec",INT 62"Adaptec",INT 63"Adaptec"
  21. --------I-61---------------------------------
  22. INT 61 - Sangoma CCIP (CCPOP 3270 resident module) INTERFACE
  23.     BX:DX -> control block
  24. SeeAlso: INT 67"Sangoma"
  25. --------v-61---------------------------------
  26. INT 61 - VIRUS - "SEMTEX"/"Screen Trasher" - INT 21h SUBSTITUTE
  27. Note:    the virus copies the original INT 21h vector into INT 61h
  28. SeeAlso: INT 21h,INT 60"VIRUS",INT 6B"VIRUS"
  29. --------N-61---------------------------------
  30. INT 61 - TCPOpen kernel - API
  31.     ES:BX -> request packet (see below)
  32. Program: TCPOpen is a TCP/IP protocol stack by Lanera
  33. Note:    the interrupt number may be set to any value from 60h through 7Fh
  34.       (default 61h) via the configuration file; there does not appear
  35.       to be an installation check, though function FFFFh can be used to
  36.       verify that the software is indeed functioning
  37.  
  38. Format of request packet:
  39. Offset    Size    Description
  40.  00h  8 BYTEs    ???
  41.  08h    WORD    function number (0000h-001Ah or FFF9h-FFFFh)
  42.  0Ah    WORD    ???
  43.  0Ch  2 BYTEs    ???
  44.  0Eh    WORD    (return) return code
  45.  10h  2 BYTEs    ???
  46.  12h    WORD    ???
  47.  14h    WORD    (return) 0001h if requested function complete
  48.  16h    WORD    (return) ???
  49.  18h  6 BYTEs    ???
  50.  1Eh    DWORD    -> ???
  51.  22h    WORD    ??? or 0000h
  52.  24h    WORD    (return) ???
  53.  
  54. Function FFFFh: installation verification
  55.     Return: offset 10h = BEEFh
  56.         offset 14h = 0001h
  57.         offset 24h = ???
  58. Index:    installation check;TCPOpen kernel
  59. --------N-61---------------------------------
  60. INT 61 - FTP Software PC/TCP - TCP/IP TSR System Call interface
  61.     AH = system call number (see also entries below)
  62.         01h "pkt_alloc" (v2.05; this is "net_config" in v2.1+)
  63.         02h "pkt_free" (v2.05; this is "get_kernel_info" in v2.1+)
  64. Return: CF clear if successful
  65.     CF set on error
  66.         AL = basic error (see below)
  67.         AH = suberror number
  68. Notes:    the installation check consists of testing for the signature "TCPTSR"
  69.       three bytes beyond the start of the interrupt handler
  70.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  71.       interrupt from 20h through E0h
  72. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  73.       greater than 54h in AH may crash the system.    Other kernels may have
  74.       this bug as well.
  75. SeeAlso: INT 61/AH=00h"PC/TCP",INT 61/AH=2Ah,INT 61/AH=54h
  76. Index:    installation check;PC/TCP
  77.  
  78. Values for error code:
  79.  00h "NET_NOERR" successful
  80.  01h "NET_ERR_INUSE" protocol or socket already in use
  81.  02h "NET_DOS_ERR" MS-DOS error (returned as suberror code in AH)
  82.  03h "NET_ERR_NOMEM" out of memory
  83.  04h "NET_ERR_NOTNETCONN" not a network descriptor
  84.  05h "NET_ERR_ILLEGALOP" invalid operation on given kind of network descriptor
  85.  06h "NET_ERR_BADPKT" illegal or corrupted packet
  86.  07h "NET_ERR_NOHOST" no host bound to specified connection
  87.  08h "NET_ERR_CANTOPEN" unable to open file
  88.  09h "NET_ERR_NET_UNREACHABLE" network is unreachable
  89.  0Ah "NET_ERR_HOST_UNREACHABLE" host is unreachable (see subcodes below)
  90.  0Bh "NET_ERR_PROT_UNREACHABLE" protocol is unreachable
  91.  0Ch "NET_ERR_PORT_UNREACHABLE" port is unreachable
  92.  0Dh "NET_ERR_TIMEOUT" operation timed out
  93.  0Eh "NET_ERR_HOSTUNKNOWN" unable to resolve host name
  94.  0Fh "NET_ERR_NOSERVERS" no name servers configured
  95.  10h "NET_ERR_SERVER_ERR" bad reply from name server
  96.     Subcodes: 0= no error, 1 = Host unreachable
  97.  11h "NET_ERR_BADFORMAT" bad format for IP address or field in IP address struc
  98.             is zero
  99.  12h "NET_ERR_BADARG" invalid argument
  100.  13h "NET_ERR_EOF" foreign host closed its end of connection
  101.  14h "NET_ERR_RESET" connection has been reset
  102.  15h "NET_ERR_WOULDBLOCK" recv() call was done on a non-blocking connection
  103.             with no data available
  104.  16h "NET_ERR_UNBOUND" insufficient resources to do operation
  105.  17h "NET_ERR_NODESC" could not allocate network descriptor
  106.  18h "NET_ERR_BADSYSCALL" invalid/unsupported kernel call
  107.  19h "NET_ERR_CANTBROADCAST" unable to broadcast
  108.  1Ah "NET_ERR_NOTESTAB" operation illegal because connection not established
  109.  1Bh kernel busy, try again later
  110.  1Ch "NET_ERR_ICMPMESG" an ICMP message was received (not on streams)
  111.     (see subcodes below)
  112. ---v2.1+---
  113.  1Dh "NET_ERR_TERMINATING" internal kernel fatal error
  114.  1Eh "NET_ERR_TAG_LOCKED" not allowed to set this tag (net_config)
  115.  1Fh "NET_ERR_BAD_INTERFACE" non existent interface specified
  116.  20h "NET_ERR_BADCONFIG" kernel cannot run - bad configuration
  117.  21h "NET_ERR_EMM" expanded memory error
  118.  22h "NET_ERR_CANT_SHUTDOWN" cant unload kernel (multitasker running)
  119.  23h "NET_ERR_PARKED_IN" unable to unhook DOS interrupt
  120.  24h "NET_ERR_NOQIOS" ran out of resources; try again later
  121.  25h "NET_ERR_WOULD_TRUNCATE" datagram too large and "don't truncate" was set
  122.  
  123. Values for subcodes of error 0Ah "NET_ERR_HOST_UNREACHABLE":
  124.  00h    no error
  125.  01h    host unreachable
  126.  02h    ARP failed
  127.  03h    hardware failure
  128.  04h    link failure
  129.  05h    no route
  130.  06h    gateway down
  131.  
  132. Values for subcodes of error 1Ch "NET_ERR_ICMPMESG":
  133.  07h    unrecognised
  134.  08h    can't fragment
  135.  09h    srcr_fail
  136.  0Ah    source quench
  137.  0Bh    time exceeded
  138.  0Ch    parameter problem
  139.  0Dh    admin_prohib. see also code 0Ah
  140. --------N-6100-------------------------------
  141. INT 61 U - PC/TCP kernel v2.05+ - GET DEBUG INFORMATION
  142.     AH = 00h
  143.     DS:SI -> 216-byte buffer for network debugging information (see below)
  144. Return: CF clear
  145.     AX = 0000h
  146.     buffer filled
  147. Notes:    this call is not documented by FTP, Inc. for any version
  148.     most of the information returned by this call is available via the
  149.       documented get_kernel_info or net_info commands.
  150.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  151. SeeAlso: INT 61"PC/TCP",INT 61/AH=2Ah"PC/TCP"
  152.  
  153. Format of network debugging information:
  154. Offset    Size    Description
  155.  00h    DWORD    number of interrupts
  156.  04h    DWORD    receive buffer low-water mark
  157.  08h    DWORD    transmit buffer low-water mark
  158.  0Ch    DWORD    number of packets received
  159.  10h    DWORD    number of packets transmitted
  160.  14h    DWORD    total receive errors
  161.  18h    DWORD    total transmit errors
  162.  1Ch  4 BYTEs    ???
  163.  20h    DWORD    receive resets
  164.  24h    DWORD    transmit resets
  165.  28h    DWORD    number of "runts" received
  166.  2Ch    DWORD    number of alignment errors on received packets
  167.  30h    DWORD    number of CRC errors on received packets
  168.  34h    DWORD    number of parity errors on received packets
  169.  38h    DWORD    number of receive overflow errors
  170.  3Ch    DWORD    number of oversized packets received
  171.  40h    DWORD    number of packets lost due to lack of buffers
  172.  44h    DWORD    receive timeouts
  173.  48h 32 BYTEs    ???
  174.  68h    DWORD    number of transmit collisions
  175.  6Ch    DWORD    number of transmit timeouts
  176.  70h    DWORD    number of transmit underflows
  177.  74h    DWORD    number of lost "crs" on transmit
  178.  78h    DWORD    number of times heartbeat failed on transmit
  179.  7Ch 24 BYTEs    ???
  180.  94h    WORD    free packet buffers
  181.  96h    WORD    total packet buffers
  182.  98h    WORD    minimum number of packet buffers free since kernel started
  183.  9Ah 24 BYTEs    ???
  184.  B2h    DWORD    pointer to TCP connection list???
  185.  B6h    DWORD    pointer to IP routing table???
  186.  BAh 30 BYTEs    ???
  187. --------V-610000-----------------------------
  188. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - ZOOM DISPLAY
  189.     AX = 0000h
  190.     BX = zoom factor (0-7)
  191. Desc:    zooms the display based on the given zoom factor
  192. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  193.       obtained by calling INT 16/AH=FFh
  194.     not all vendors include the Tseng TSR which supports these functions
  195. SeeAlso: AX=0001h"OPTIMA",AX=0002h"OPTIMA",AX=0005h"OPTIMA"
  196. SeeAlso: INT 16/AH=FFh"OPTIMA"
  197. --------N-610001SF0001-----------------------
  198. INT 61 - Banyan VINES - "Sosock" - OPEN COMMUNICATIONS SOCKET
  199.     AX = 0001h subfn 0001h
  200.     DS:DX -> communications control block (function 0001h)
  201. Return: AX = status (see below)
  202. Note:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  203.       interrupt handler is identified by the string "BANV" in the four
  204.       bytes immediately preceding the interrupt handler
  205. SeeAlso: AX=0001h/SF=0002h,AX=0001h/SF=0008h,INT 15/AX=DE2Eh
  206.  
  207. Values for status:
  208.  0000h    successful
  209.  0001h    service not installed
  210.  0002h    invalid service ID
  211.  0098h    resource already in use
  212.  009Eh    address family does not exist
  213.  009Fh    socket type does not exist
  214.  00A0h    protocol does not exist
  215.  00A1h    no more sockets available
  216.  00A2h    no more buffer space available
  217.  
  218. Format of control block:
  219. Offset    Size    Description
  220.  00h    WORD    0001h
  221.  02h    WORD    pointer to argument block
  222.  04h    WORD    error return code
  223.  06h  4 BYTEs    reserved
  224.  
  225. Format of argument block:
  226. Offset    Size    Description
  227.  00h    WORD    pointer to 2-byte buffer for socket identifier
  228.  02h    WORD    address family
  229.         0003h Banyan
  230.  04h    WORD    socket type
  231.         in address family 0003h
  232.             0001h IPC socket
  233.             0002h SPP socket
  234.  06h    WORD    protocol number
  235.         FFFFh default
  236.  08h    WORD    pointer to 16-byte buffer for socket address
  237.  0Ah    WORD    local port number
  238.         0000h if service should assign transient port number
  239.         0001h to 01FFh well-known port number (assigned by Banyan)
  240.  
  241. Format of IPC port:
  242. Offset    Size    Description
  243.  00h    WORD    address family (always 0003h for Banyan ports)
  244.  04h  4 BYTEs    network number (server's serial number)
  245.  06h    WORD    subnet number  (0001h = server, 8000h-FFFEh = PC)
  246.  08h    WORD    port ID (0001h-01FFh for "well-known" ports)
  247.  0Ah    BYTE    hop count
  248.  0Bh  5 BYTEs    filler
  249. --------N-610001SF0002-----------------------
  250. INT 61 - Banyan VINES - "Sosend" - INITIATE OUTPUT EVENT
  251.     AX = 0001h subfn 0002h
  252.     DS:DX -> communications control block (function 0002h)
  253. Return: AX = status (see below)
  254. Note:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  255.       interrupt handler is identified by the string "BANV" in the four
  256.       bytes immediately preceding the interrupt handler
  257. SeeAlso: AX=0001h/SF=0001h,AX=0001h/SF=0005h
  258.  
  259. Values for status:
  260.  0000h    successful
  261.  0001h    service not installed
  262.  0002h    invalid service ID
  263.  0003h-000Ah reserved for BANV interface errors
  264.  0097h    invalid socket identifier
  265.  009Bh    destination node unreachable
  266.  009Ch    message overflow
  267.  009Dh    destination socket nonexistent
  268.  00A2h    no more buffer space
  269.  00A3h    timeout
  270.  00B1h    resource disconnect
  271.  
  272. Format of control block:
  273. Offset    Size    Description
  274.  00h    WORD    0002h
  275.  02h    WORD    pointer to argument block (see below)
  276.  04h    WORD    error return code
  277.         0000h successful
  278.         0097h invalid socket ID
  279.         00A2h no more buffer space
  280.         00A3h timeout event
  281.         00A5h resource not available
  282.         00A6h internal communication failure
  283.         00B1h resource disconnect
  284.  06h  4 BYTEs    reserved
  285.  
  286. Format of argument block:
  287. Offset    Size    Description
  288.  00h    WORD    routine metric
  289.  02h    WORD    error return code
  290.  04h    WORD    socket identifier
  291.  06h    WORD    pointer to send buffer
  292.  08h    WORD    length of send buffer
  293.  0Ah    WORD    flags
  294.         bit 0: async request
  295.         bit 1: reliable message
  296.         bit 3: end of user message received
  297.         bit 4: vectored request (if set, send buffer contains buffer
  298.             descriptors)
  299.         bit 5: connection-specific receive
  300.         bit 6: change to connection-specific receive mode
  301.  0Ch 16 BYTEs    socket address (see below)
  302.  1Ch    WORD    timeout value in multiples of 200ms
  303.  1Eh    WORD    connection identifier
  304.  20h    WORD    type of request
  305.         0001h send message
  306.         0002h establish a virtual connection
  307.         0003h terminate a virtual connection
  308.  
  309. Format of buffer descriptor:
  310. Offset    Size    Description
  311.  00h    WORD    data segment
  312.  02h    WORD    buffer pointer
  313.  04h    WORD    buffer length
  314.  06h    WORD    character count
  315.  
  316. Format of socket address for unreliable datagrams:
  317. Offset    Size    Description
  318.  00h    WORD    0003h      address family
  319.  02h    DWORD    FFFFFFFFh network number
  320.  06h    WORD    FFFFh      subnet number
  321.  08h    WORD          local port number
  322.  0Ah    BYTE    00h-0Fh      hop count
  323.  0Bh  5 BYTEs    0000h      filler
  324. --------N-610001SF0003-----------------------
  325. INT 61 - Banyan VINES - "Sorec" - RECEIVE INPUT EVENT NOTIFICATION
  326.     AX = 0001h subfn 0003h
  327.     DS:DX -> communications control block (function 0003h)
  328. Return: AX = status (00-0Ah,97h,A2h,A3h) (see AX=0001h/SF=0002h)
  329. Note:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  330.       interrupt handler is identified by the string "BANV" in the four
  331.       bytes immediately preceding the interrupt handler
  332. SeeAlso: AX=0001h/SF=0002h
  333.  
  334. Format of control block:
  335. Offset    Size    Description
  336.  00h    WORD    0003h
  337.  02h    WORD    pointer to argument block (see below)
  338.  04h    WORD    error return code
  339.         0000h successful
  340.         0097h invalid socket ID
  341.         00A2h no more buffer space
  342.         00A3h timeout event
  343.         00A5h resource not available
  344.         00A6h internal communication failure
  345.         00B1h resource disconnect
  346.  06h  4 BYTEs    reserved
  347.  
  348. Format of argument block:
  349. Offset    Size    Description
  350.  00h    WORD    character count
  351.  02h    WORD    error return code
  352.  04h    WORD    socket identifier
  353.  06h    WORD    pointer to receive buffer
  354.  08h    WORD    length of receive buffer
  355.  0Ah    WORD    flags
  356.         bit 0: async request
  357.         bit 2: flush receive buffer on overflow
  358.         bit 3: end of user message received
  359.         bit 4: vectored request (if set, receive buffer contains buffer
  360.             descriptors)
  361.         bit 5: connection-specific receive
  362.         bit 6: change to connection-specific receive mode
  363.  0Ch 16 BYTEs    socket address
  364.  1Ch    WORD    timeout value in multiples of 200ms
  365.  1Eh    WORD    connection identifier
  366.  20h    WORD    type of response
  367.         0001h message received
  368.         0002h virtual connection established
  369.         0003h virtual connection terminated
  370.  
  371. Format of buffer descriptor:
  372. Offset    Size    Description
  373.  00h    WORD    data segment
  374.  02h    WORD    buffer pointer
  375.  04h    WORD    buffer length
  376.  06h    WORD    character count
  377. --------N-610001SF0004-----------------------
  378. INT 61 - Banyan VINES - "Soclose" - CLOSE A SOCKET
  379.     AX = 0001h subfn 0004h
  380.     DS:DX -> communications control block (function 0004h)
  381. Return: AX = status (00h-0Ah,97h) (see AX=0001h/SF=0002h)
  382. Note:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  383.       interrupt handler is identified by the string "BANV" in the four
  384.       bytes immediately preceding the interrupt handler
  385. SeeAlso: AX=0001h/SF=0001h,INT 15/AX=DE2Eh
  386.  
  387. Format of control block:
  388. Offset    Size    Description
  389.  00h    WORD    0004h
  390.  02h    WORD    pointer to argument block (see below)
  391.  04h    WORD    error return code
  392.  06h  4 BYTEs    reserved
  393.  
  394. Format of argument block:
  395. Offset    Size    Description
  396.  00h    WORD    socket identifier
  397. --------N-610001SF0005-----------------------
  398. INT 61 - Banyan VINES - "Sowait" - WAIT FOR ASYNCHRONOUS EVENT COMPLETION
  399.     AX = 0001h subfn 0005h
  400.     DS:DX -> communications control block (function 0005h)
  401. Return: AX = status (see below)
  402. Notes:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  403.       interrupt handler is identified by the string "BANV" in the four
  404.       bytes immediately preceding the interrupt handler
  405.     returns results for all asynchronous operations invoked from the
  406.       data segment used for this call
  407. SeeAlso: AX=0001h/SF=0002h,AX=0001h/SF=0009h
  408.  
  409. Values for status:
  410.  0000h    successful
  411.  0001h    service not installed
  412.  0002h    invalid service ID
  413.  0003h-000Ah reserved for BANV interface errors
  414.  00A2h    no more buffer space available
  415.  00A3h    timeout event
  416.  
  417. Format of control block:
  418. Offset    Size    Description
  419.  00h    WORD    0005h
  420.  02h    WORD    pointer to argument block (see below)
  421.  04h    WORD    error return code
  422.  06h  4 BYTEs    reserved
  423.  
  424. Format of argument block:
  425. Offset    Size    Description
  426.  00h    WORD    pointer to WORD event pointer
  427.  02h    WORD    timeout in multiples of 200ms, FFFFh = infinite
  428. --------N-610001SF0008-----------------------
  429. INT 61 - Banyan VINES - "Sosession" - REGISTER APPLICATION WITH COMM SERVICE
  430.     AX = 0001h subfn 0008h
  431.     DS:DX -> communications control block (function 0008h)
  432. Return: AX = status
  433.         0000h  successful
  434.         00A2h  no more buffer space available
  435. Note:    Banyan can use any interrupt from 60h through 66h (default 61h).  The
  436.       Banyan interrupt handler is identified by the string "BANV" in the
  437.       four bytes immediately preceding the interrupt handler
  438. SeeAlso: AX=0001h/SF=0001h,AX=0001h/SF=0009h
  439.  
  440. Format of control block:
  441. Offset    Size    Description
  442.  00h    WORD    0008h
  443.  02h    WORD    process type
  444.         0001h transient process
  445.         0002h resident process
  446.  04h    WORD    error return code
  447.  06h  4 BYTEs    reserved
  448. --------N-610001SF000B-----------------------
  449. INT 61 - Banyan VINES - "Soint" - SET USER COMPLETION FUNCTION
  450.     AX = 0001h subfn 000Bh
  451.     DS:DX -> communications control block (function 000Bh)
  452. Return: AX = status (00h-0Ah,A2h) (see AX=0001h/SF=0005h)
  453. Notes:    Banyan can use any interrupt from 60h through 66h.  The Banyan
  454.       interrupt handler is identified by the string "BANV" in the four
  455.       bytes immediately preceding the interrupt handler
  456.     FAR user function is invoked with SS,DS, and ES set to segment of
  457.       control block, and with the stack containing
  458.         DWORD    return address
  459.         WORD    argument pointer (sosend or sorec argument block)
  460.         WORD    error return code
  461.             0000h argument pointer is valid
  462.             00A3h timeout
  463. SeeAlso: AX=0001h/SF=0005h,AX=0001h/SF=0008h
  464.  
  465. Format of control block:
  466. Offset    Size    Description
  467.  00h    WORD    000Bh
  468.  02h    WORD    pointer to argument block (see below)
  469.  04h    WORD    error return code
  470.  06h  2 BYTEs    reserved
  471.  08h    WORD    user CS register
  472.  
  473. Format of argument block:
  474. Offset    Size    Description
  475.  00h    WORD    pointer to user interrupt function
  476.  02h    WORD    pointer to user stack
  477.  04h    WORD    initial timeout value in multiples of 200ms, FFFFh = infinite
  478. --------V-610001-----------------------------
  479. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - CENTER ZOOM WINDOW
  480.     AX = 0001h
  481.     BX = X coordinate to center
  482.     CX = Y coordinate to center
  483. Desc:    Positions the zoom window such that the specified window-relative
  484.       coordinates appear as close as possible to the center of the
  485.       display.  Useful for scrolling and panning.
  486. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  487.       obtained by calling INT 16/AH=FFh
  488.     not all vendors include the Tseng TSR which supports these functions
  489. SeeAlso: AX=0000h"OPTIMA",AX=0002h"OPTIMA",AX=0005h"OPTIMA"
  490. SeeAlso: INT 16/AH=FFh"OPTIMA"
  491. --------I-610002-----------------------------
  492. INT 61 - Banyan VINES - 3270 INTERFACE
  493.     AX = 0002h
  494.     BH = function
  495.         00h "pi2reset"  reset 3270/SNA or 3270/BSC driver
  496.         02h "pi2bsc" (3270/BSC only)
  497.         03h "pi2get"    get information stored in 3270 resident driver
  498.         04h "pi2put"    store information in 3270 resident driver
  499.         05h "pi2gcur"   get current screen position
  500.         07h "pi2sdat"   send data keystroke
  501.         08h "pi2scom"   send command keystroke
  502.         0Ah "pi2field"  get field info for arbitrary screen positions
  503.         0Fh "pi2stat"   get logical unit/device status
  504.         12h "pi2nlus"   determine logical unit/device assignment
  505.         13h "pi2gate"   specifies comm port address to gateway service
  506.         14h "pi2attach" attach a logical unit/device
  507.         15h "pi2sdev"   save logical unit/device info in resident driver
  508.                 (not supported in >3.0)
  509.         16h "pi2gdev"   get device information (not supported in >3.0)
  510.         17h "pi2luinfo" get info about specific logical unit/device
  511.         18h "pi2gerr"   get finer error detail
  512.         19h "pi2dhold"  (3270/SNA only)  holds a 3270 device
  513.         1Ah "pi2shut"   release memory-resident module
  514.         1Ch "pi2sprof"  save profile info in res driver (not supp in >3.0)
  515.         1Dh "pi2gprof"  get prevsly stored profile info (not supp in >3.0)
  516.     DS:CX -> argument block (except BH=00h,1Ah)
  517. Return: AX = status (see below)
  518. Notes:    Either 3270/SNA or 3270/BSC interface may use AX=0002h, depending on
  519.       which is loaded first.  The other interface will use AX=000Ah
  520.     Status codes greater than 63h indicate an inconsistency in the 3270/SNA
  521.       or 3270/BSC resident driver, which must be reloaded by the user
  522.  
  523. Values for status:
  524.  0000h    successful
  525.  000Bh    invalid parameter or data does not fit data area
  526.  000Ch    another code path currently active in resident driver
  527.  000Dh    operation currently not allowed
  528.  0032h    encountered connection disconnect error
  529.  0033h    encountered "sosend" completion error
  530.  0034h    encountered "sosend" communication error
  531.  0035h    attach request refused.    extended error info via "pi2gerr":
  532.     01h resource unavailable
  533.     02h invalid type
  534.     03h version mismatch
  535.     04h invalid logical unit number
  536.     05h error during ARL processing
  537.     06h no access for user
  538.  0071h    encountered "sosock" error
  539.  0072h    encountered unrecognizable error
  540.  0073h    encountered "sowait" error (extended info via "pi2gerr")
  541.  0074h    encountered invalid type-of-request on "sowait"
  542.  0075h    encountered "sorec" error (extended info via "pi2gerr")
  543.  0076h    encountered "sorec" completion error (ext info via "pi2gerr")
  544.  0077h    encountered connection request
  545.  0078h    encountered unrecognizable data
  546.  0079h    encountered unknown connection ID (ext info via "pi2gerr")
  547.  
  548. Format of argument block for BH=03h,04h:
  549. Offset    Size    Description
  550.  00h    WORD    size of data area (max 256)
  551.  02h  N BYTEs    data area
  552.  
  553. Format of argument block for BH=05h:
  554. Offset    Size    Description
  555.  00h    WORD    logical unit/device number
  556.  02h    WORD    pointer to WORD buffer for cursor index
  557.  04h    WORD    pointer to BYTE buffer for current field attribute
  558.  
  559. Format of argument block for BH=07h:
  560. Offset    Size    Description
  561.  00h    WORD    logical unit/device number
  562.  02h    WORD    ASCII data byte
  563.  04h    WORD    pointer to WORD count of characters which will need updating
  564.  
  565. Format of argument block for BH=08h:
  566. Offset    Size    Description
  567.  00h    WORD    logical unit/device number
  568.  02h    WORD    keystroke
  569.         0000h Enter
  570.         0001h Clear
  571.         0002h PA1
  572.         0003h PA2
  573.         0004h PA3
  574.         0005h PF1
  575.         ...
  576.         001Ch PF24
  577.         001Dh CSELECT (cursor select)
  578.         001Eh Insert
  579.         001Fh Delete
  580.         0020h EOField
  581.         0021h EINPUT (erase input)
  582.         0022h Reset
  583.         0023h Attention
  584.         0024h SysReq
  585.         0025h Duplicate
  586.         0026h Fieldmark
  587.         0027h Home
  588.         0028h NextLine
  589.         0029h Tab
  590.         002Ah BackTab
  591.         002Bh cursor up
  592.         002Ch cursor down
  593.         002Dh cursor right
  594.         002Eh cursor left
  595.         002Fh double cursor right
  596.         0030h double cursor left
  597.         0031h PRINT
  598.         0032h CANCEL
  599.         0033h Backspace
  600.  
  601. Format of argument block for BH=0Ah:
  602. Offset    Size    Description
  603.  00h    WORD    logical unit/device number
  604.  02h    WORD    screen index
  605.  04h    WORD    pointer to WORD buffer for field length
  606.  06h    WORD    pointer to WORD buffer for offset in screen of field start
  607.  
  608. Format of argument block for BH=0Fh:
  609. Offset    Size    Description
  610.  00h    WORD    logical unit/device number
  611.  02h    WORD    clear mask (clear these bits of status after returning status)
  612.  04h    WORD    pointer to WORD buffer for device status (see below)
  613.  
  614. Bitfields for device status:
  615.  bit 10 status modified
  616.  bit 9    buffer modified
  617.  bit 8    set cursor
  618.  bit 5    sound alarm
  619.  bits 1-0  size of print line for printer logical units
  620.     00  unformatted line
  621.     01  40-character line
  622.     10  64-character line
  623.     11  80-character line
  624.  
  625. Format of argument block for BH=12h:
  626. Offset    Size    Description
  627.  00h    WORD    pointer to WORD buffer for number of logical units or devices
  628.  02h    WORD    pointer to WORD buffer for version number
  629.  04h    WORD    pointer to 64-byte buffer for logical unit/device list
  630.  
  631. Format of argument block for BH=13h:
  632. Offset    Size    Description
  633.  00h 16 BYTEs    communications port address (see AX=0001h#"Sosock")
  634.  
  635. Format of argument block for BH=14h:
  636. Offset    Size    Description
  637.  00h    WORD    logical unit/device number
  638.         0000h attach any free device of the specified type
  639.  02h    WORD    logical unit/device type
  640.         (3270/SNA) 01h, 02h, or 03h
  641.         (3270/BSC) 02h display
  642.         (3270/BSC) 03h printer
  643.  04h    WORD    pointer to WORD buffer for attached logical unit/device number
  644.  
  645. Format of argument block for BH=16h:
  646. Offset    Size    Description
  647.  00h    WORD    pointer to 18-byte buffer for device block (see below)
  648.         first WORD must be set to desired logical unit/device number
  649.  
  650. Format of argument block for BH=17h:
  651. Offset    Size    Description
  652.  00h    WORD    logical unit/device number
  653.  02h    WORD    pointer to information block in caller's DS (see below)
  654.  
  655. Format of argument block for BH=18h:
  656. Offset    Size    Description
  657.  00h    WORD    pointer to WORD buffer for major error code
  658.  02h    WORD    pointer to WORD buffer for minor error code
  659.  
  660. Format of argument block for BH=19h:
  661. Offset    Size    Description
  662.  00h    WORD    logical unit/device number
  663.  
  664. Format of argument block for BH=1Ch,1Dh:
  665. Offset    Size    Description
  666.  00h    WORD    pointer to profile block in caller's DS (see below)
  667.  
  668. Format of device block, argument block for BH=15h:
  669. Offset    Size    Description
  670.  00h    WORD    logical unit/device number
  671.  02h    WORD    logical unit/device type
  672.  04h    WORD    display model number
  673.  06h    WORD    numeric checking
  674.  08h    WORD    status line
  675.  0Ah    BYTE    unprotected normal field attribute
  676.  0Bh    BYTE    unprotected intensified field attribute
  677.  0Ch    BYTE    protected normal field attribute
  678.  0Dh    BYTE    protected intensified field attribute
  679.  0Eh    WORD    reserved
  680.  10h    WORD    printer port number
  681.  
  682. Format of information block:
  683. Offset    Size    Description
  684.  00h    WORD    device model number
  685.  02h    DWORD    screen buffer pointer
  686.  06h    DWORD    status line pointer (see below)
  687.  0Ah    DWORD    reserved
  688.  
  689. Format of status line:
  690. Offset    Size    Description
  691.  00h    BYTE    comm line status
  692.         00h inactive
  693.         01h active
  694.  01h    BYTE    activation level
  695.         01h physical unit activated
  696.         02h logical unit also activated
  697.         03h session is bound
  698.  02h    BYTE    data traffic state
  699.         00h inactive
  700.         01h active
  701.  03h    BYTE    screen ownership
  702.         00h SLU->PLU sessoin owns screen
  703.         01h SLU->SSCP session owns screen
  704.  04h    BYTE    keyboard status (see below)
  705.  05h    BYTE    insert mode
  706.         01h if in insert mode
  707.  06h    BYTE    numeric
  708.         01h if current screen buffer is numeric only
  709.  07h    BYTE    printer status
  710.         00h printer not assigned
  711.         01h printer is inactive
  712.         02h printer error
  713.         03h currently printing
  714.         04h printer is busy
  715.         05h printer is very busy
  716.  08h    BYTE    printer assignment
  717.  09h    BYTE    maximum size of network name
  718.  0Ah  N BYTEs    ASCIZ network name
  719.     BYTE    maximum size of message window
  720.       M BYTEs    null-terminated message window
  721.     BYTE    code set
  722.         00h EBCDIC
  723.         01h ASCII
  724.       M BYTEs    extended attributes
  725.         01h extended attributes are in effect (stored at screen+1920)
  726.             each extended attribute specifies
  727.             bits 0,1: 00=normal, 01=blink, 10=reverse, 11=underscor
  728.             bits 2-4: 000=default,001=blue,010=red,011=pink,
  729.                   100=green,101=turquoise,110=yellow,111=white
  730.     BYTE    extended color
  731.         01h other than base color is in effect
  732.  
  733. Values for keyboard status:
  734.  00h    UNLOCK - ready to accept data
  735.  01h    TIME - aid was struck
  736.  02h    SYSTEM - received response no restore
  737.  03h    FUNCTION - unavailable keyboard function
  738.  04h    INPUT - not currently used
  739.  05h    ENDFIELD - field filled in insert mode
  740.  06h    PROTECTED - attempt to enter in protected field
  741.  07h    NUMERIC - attempt to enter in numeric field
  742.  08h    PROGRAM - error in outbound data stream
  743.  
  744. Format of profile block:
  745. Offset    Size    Description
  746.  00h 64 BYTEs    gateway service name
  747.  40h 16 BYTEs    gateway comm port address
  748.  50h    WORD    primary logical unit number
  749.  52h    WORD    secondary logical unit type
  750.  54h    WORD    secondary logical unit number
  751.  56h    WORD    printer assignment
  752.  58h 50 BYTEs    keyboard definitions filename
  753. --------V-610002-----------------------------
  754. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - END ZOOM
  755.     AX = 0002h
  756. Desc:    switches off zoom and returns window to its original state
  757. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  758.       obtained by calling INT 16/AH=FFh
  759.     not all vendors include the Tseng TSR which supports these functions
  760. SeeAlso: AX=0000h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  761. --------N-610003SF00-------------------------
  762. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INIT USER BUFFER PTR INFO
  763.     AX = 0003h subfn 00h
  764.     DS:BX -> argument block (see below)
  765. Return: AX = status (see below)
  766. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=08h,AX=0003h/SF=0Dh
  767.  
  768. Values for status:
  769.  0000h    successful
  770.  000Bh    invalid session ID
  771.  000Ch    session not active
  772.  000Dh    invalid request type
  773.  000Eh    invalid parameters
  774.  000Fh    out of heap space
  775.  0010h    timeout on send
  776.  0011h    Banyan communications error
  777.  0012h    session not waiting for host
  778.  0013h    session is active
  779.  0014h    duplicate suspend session request
  780.  0015h    no session suspended
  781.  0016h    ring data buffer full
  782.  0017h    printer error encountered
  783.  0018h    Banyan communications error
  784.  0019h    unable to make connection
  785.  001Ah    no ring buffer specified at startup
  786.  001Bh    service is down
  787.  001Ch    invalid service name
  788.  001Dh    service is closed
  789.  001Eh    invalid connection name
  790.  001Fh    max session limit reached for service
  791.  0020h    access rights list for connection/dialout does not include this user
  792.  0021h    service not responding
  793.  0022h    missing telephone number
  794.  
  795. Format of argument block:
  796. Offset    Size    Description
  797.  00h    BYTE    session ID (00h)
  798.  01h    BYTE    00h (func "initialize user buffer pointer information area")
  799.  02h    WORD    -> user buffer ptr info area in caller's current DS (see below)
  800.  
  801. Format of user buffer ptr info area:
  802. Offset    Size    Description
  803.  00h    WORD    flags
  804.         0000h don't read interface's data buffer
  805.         0001h read data buffer
  806.  02h    DWORD    pointer to ring buffer
  807.  06h    WORD    length of ring buffer
  808.  08h    WORD    ring buffer offset to last byte read by caller
  809.  0Ah    DWORD    pointer to WORD containing offset of last byte
  810.           in ring buffer filled
  811.  0Eh    DWORD    pointer to screen buffer
  812.  12h    DWORD    pointer to field containing cursor position
  813.  16h    DWORD    pointer to terminal status area (see below)
  814.  
  815. Format of terminal status area:
  816. Offset    Size    Description
  817.  00h    BYTE    status of session: 4Eh=oNline, 46h=oFfline, 57h=Waiting
  818.  01h    BYTE    terminal type (00h=VT100, 01h=TTY, 02h=VT52, 03h=IBM3101)
  819.  02h    BYTE    current keypad mode (VT100,VT52 only)
  820.         4Eh ("N") numeric mode
  821.         41h ("A") application mode
  822.  03h  4 BYTEs    current state of LEDs (VT100 only)
  823.         00h off
  824.         01h on
  825.  07h    WORD    line error count
  826.  09h    WORD    primary error code (see below)
  827.  0Bh    WORD    secondary error code
  828.  
  829. Values for primary error code:
  830.  0000h    no error
  831.  0001h    unable to make connection
  832.  0002h    communications error, restart session
  833.  0003h    async terminal emulation service unavailable
  834.  0004h    lost carrier
  835.  0005h    all matching lines busy
  836.  0006h    no lines defined for connection name
  837.  0007h    no dial lines available on server
  838.  0008h    no matching dial lines available
  839.  0009h    out of heap space
  840.  000Ah    service error encountered
  841.  000Bh    timed out waiting to connect
  842.  000Ch    communications error
  843.  000Dh    communications error
  844.  000Eh    host wants file transferred to/from PC
  845.  000Fh    host software changed session parameter
  846.  0010h    host software changed tap settings
  847.  0011h    host software changed LED indicator
  848.  0012h    host software changed display background (secondary error code 00h for
  849.       white on black, 01h for black on white)
  850.  0013h    host software changed display option (secondary error code 00h for off,
  851.       01h for on)
  852.  0014h    communications error
  853.  0015h    communications error
  854.  0016h    unable to make connection
  855.  0017h    unable to make connection
  856. --------N-610003SF01-------------------------
  857. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SEND TO HOST
  858.     AX = 0003h subfn 01h
  859.     DS:BX -> argument block (see below)
  860. Return: AX = status (see AX=0003h/SF=00h)
  861. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=02h,AX=0003h/SF=14h
  862.  
  863. Format of argument block:
  864. Offset    Size    Description
  865.  00h    BYTE    session ID (00h)
  866.  01h    BYTE    01h (function "send to host")
  867.  02h    BYTE    type
  868.         00h ASCII byte
  869.         01h ASCII string
  870.         02h terminal function code
  871.         03h up arrow
  872.         04h down arrow
  873.         05h left arrow
  874.         06h right arrow
  875.         07h break
  876.  03h  N BYTEs    type-specific info (see below)
  877.  
  878. Format of type-specific info:
  879. Offset    Size    Description
  880. ---ASCII byte---
  881.  03h    BYTE    byte to send to host
  882. ---ASCII string---
  883.  03h    WORD    length of string
  884.  05h    WORD    pointer to string
  885. ---terminal function code (VT52/VT100)---
  886.  03h    BYTE    function code
  887.         00h keypad 0
  888.         01h keypad 1
  889.         ...
  890.         09h keypad 9
  891.         0Ah keypad -
  892.         0Bh keypad ,
  893.         0Ch keypad .
  894.         0Dh keypad ENTER
  895.         0Eh PF1
  896.         0Fh PF2
  897.         10h PF3
  898.         11h PF4
  899. ---terminal function code (IBM3101)---
  900.  03h    BYTE    function code
  901.         00h PF1
  902.         ...
  903.         07h PF8
  904.         08h Home
  905. --------N-610003SF02-------------------------
  906. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - "CONTROL MONITOR"
  907.     AX = 0003h subfn 02h
  908.     DS:BX -> argument block (see below)
  909. Return: AX = status (see AX=0003h/SF=00h)
  910. SeeAlso: AX=0003h/SF=03h,AX=0003h/SF=05h
  911.  
  912. Format of argument block:
  913. Offset    Size    Description
  914.  00h    BYTE    session ID (00h)
  915.  01h    BYTE    02h (function "control monitor")
  916.  02h    BYTE    display flag
  917.         00h don't display data received from host
  918.         01h display data
  919. --------N-610003SF03-------------------------
  920. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - "FLOW CONTROL DATA"
  921.     AX = 0003h subfn 03h
  922.     DS:BX -> argument block (see below)
  923. Return: AX = status (see AX=0003h/SF=00h)
  924. Desc:    this function permits the caller to freeze/unfreeze the display and
  925.       the ring buffer
  926. SeeAlso: AX=0003h/SF=02h,AX=0003h/SF=06h
  927.  
  928. Format of argument block:
  929. Offset    Size    Description
  930.  00h    BYTE    session ID (00h)
  931.  01h    BYTE    03h (function "flow control data")
  932.  02h    BYTE    flow control flag
  933.         00h allow characters to be put into display or ring buffer
  934.         01h don't place any more characters into display or ring buffer
  935. --------N-610003SF04-------------------------
  936. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - END ACTIVE SESSION
  937.     AX = 0003h subfn 04h
  938.     DS:BX -> argument block (see below)
  939. Return: AX = status (see AX=0003h/SF=00h)
  940. SeeAlso: AX=0003h/SF=0Ah,AX=0003h/SF=0Dh,AX=0003h/SF=0Fh
  941.  
  942. Format of argument block:
  943. Offset    Size    Description
  944.  00h    BYTE    session ID (00h)
  945.  01h    BYTE    04h (function "end active session")
  946. --------N-610003SF05-------------------------
  947. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET SESSION PARAMETER
  948.     AX = 0003h subfn 05h
  949.     DS:BX -> argument block (see below)
  950. Return: AX = status (see AX=0003h/SF=00h)
  951. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=06h,AX=0003h/SF=08h
  952.  
  953. Format of argument block:
  954. Offset    Size    Description
  955.  00h    BYTE    session ID (00h)
  956.  01h    BYTE    05h (function "set session parameter")
  957.  02h    BYTE    parameter number (see below)
  958.  03h    BYTE    new parameter value
  959.  
  960. Values for parameter number:
  961.  00h    line speed (00h=any, 01h=50, 02h=110, 03h=134.5, 04h=150,
  962.           05h=300, 06h=600, 07h=1200, 08h=2400, 09h=4800, 0Ah=9600)
  963.  01h    parity (00h=none, 01h=odd, 02h=even)
  964.  02h    duplex (00h=full, 01h=half)
  965.  03h    character size (00h=7 bits, 01h=8 bits)
  966.  04h    stop bits (00h=1, 01h=2)
  967.  05h    XON/XOFF flow control (00h=no, 01h=yes)
  968.  07h    intercharacter delay in tenths of a second
  969.  08h    interline delay in tenths of a second
  970.  09h    auto linefeed (00h=no, 01h=yes)
  971.  0Ah    filter control characters (00h=no, 01h=yes)
  972.  0Bh    terminal type (00h=VT100,01h=glassTTY,02h=VT52,03h=IBM3101)
  973.  0Ch    auto wrap (00h=no, 01h=yes)
  974.  0Dh    cursor shape (00h=underscore, 01h=block)
  975.  0Eh    character set (00h=UK, 01h=US ASCII)
  976.  0Fh    printer port (00h=LPT1, 01h=LPT2, 02h=LPT3)
  977. --------N-610003SF06-------------------------
  978. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET SESSION PARAMETER
  979.     AX = 0003h subfn 06h
  980.     DS:BX -> argument block (see below)
  981. Return: AX = status (see AX=0003h/SF=00h)
  982. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=05h,AX=0003h/SF=07h
  983.  
  984. Format of argument block:
  985. Offset    Size    Description
  986.  00h    BYTE    session ID (00h)
  987.  01h    BYTE    06h (function "get session parameter")
  988.  02h    BYTE    parameter number (see AX=0003h/SF=05h)
  989.  03h    BYTE    (return) current parameter value
  990. --------N-610003SF07-------------------------
  991. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET TAB SETTINGS
  992.     AX = 0003h subfn 07h
  993.     DS:BX -> argument block (see below)
  994. Return: AX = status (see AX=0003h/SF=00h)
  995. SeeAlso: AX=0003h/SF=05h,AX=0003h/SF=08h
  996.  
  997. Format of argument block:
  998. Offset    Size    Description
  999.  00h    BYTE    session ID (00h)
  1000.  01h    BYTE    07h (function "set tab settings")
  1001.  02h    WORD    pointer to 80-byte buffer in caller's current DS
  1002.           each byte = 00h if no tab, 01h if tab at that position
  1003. --------N-610003SF08-------------------------
  1004. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET TAB SETTINGS
  1005.     AX = 0003h subfn 08h
  1006.     DS:BX -> argument block (see below)
  1007. Return: AX = status (see AX=0003h/SF=00h)
  1008. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=07h
  1009.  
  1010. Format of argument block:
  1011. Offset    Size    Description
  1012.  00h    BYTE    session ID (00h)
  1013.  01h    BYTE    08h (function "get tab settings")
  1014.  02h    WORD    pointer to 80-byte buffer in caller's current DS
  1015.         each byte set to 00h if no tab, 01h if tab at that position
  1016. --------N-610003SF09-------------------------
  1017. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - REFRESH EMULATION SCREEN
  1018.     AX = 0003h subfn 09h
  1019.     DS:BX -> argument block (see below)
  1020. Return: AX = status (see AX=0003h/SF=00h)
  1021. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=0Bh
  1022.  
  1023. Format of argument block:
  1024. Offset    Size    Description
  1025.  00h    BYTE    session ID (00h)
  1026.  01h    BYTE    09h (function "refresh emulation screen")
  1027. --------N-610003SF0A-------------------------
  1028. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SUSPEND SESSION TEMPORARILY
  1029.     AX = 0003h subfn 0Ah
  1030.     DS:BX -> argument block (see below)
  1031. Return: AX = status (see AX=0003h/SF=00h)
  1032. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=09h,AX=0003h/SF=0Bh,AX=0003h/SF=0Dh
  1033.  
  1034. Format of argument block:
  1035. Offset    Size    Description
  1036.  00h    BYTE    session ID (00h)
  1037.  01h    BYTE    0Ah (function "suspend session temporarily")
  1038.  02h    WORD    size of session information to be saved
  1039.  04h    WORD    pointer to buffer in caller's DS
  1040. --------N-610003SF0B-------------------------
  1041. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - RESUME SUSPENDED SESSION
  1042.     AX = 0003h subfn 0Bh
  1043.     DS:BX -> argument block (see below)
  1044. Return: AX = status (see AX=0003h/SF=00h)
  1045. SeeAlso: AX=0003h/SF=09h,AX=0003h/SF=0Ah
  1046.  
  1047. Format of argument block:
  1048. Offset    Size    Description
  1049.  00h    BYTE    session ID (00h)
  1050.  01h    BYTE    0Bh (function "restore previously suspended session")
  1051.  02h    WORD    size of buffer into which session info is restored
  1052.  04h    WORD    pointer to buffer in caller's DS
  1053. --------N-610003SF0C-------------------------
  1054. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - SET SCROLL LOCK CHECKING
  1055.     AX = 0003h subfn 0Ch
  1056.     DS:BX -> argument block (see below)
  1057. Return: AX = status (see AX=0003h/SF=00h)
  1058. SeeAlso: AX=0003h/SF=00h
  1059.  
  1060. Format of argument block:
  1061. Offset    Size    Description
  1062.  00h    BYTE    session ID (00h)
  1063.  01h    BYTE    0Ch (function "set state of scroll lock checking")
  1064.  02h    BYTE    check_scroll_lock flag
  1065.         00h off
  1066.         01h on (display of host data stopped while ScrollLock on)
  1067. --------N-610003SF0D-------------------------
  1068. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - EXIT EMULATION
  1069.     AX = 0003h subfn 0Dh
  1070.     DS:BX -> argument block (see below)
  1071. Return: AX = status (see AX=0003h/SF=00h)
  1072. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=0Ah
  1073.  
  1074. Format of argument block:
  1075. Offset    Size    Description
  1076.  00h    BYTE    session ID (00h)
  1077.  01h    BYTE    0Dh (function "exit emulation")
  1078. --------N-610003SF0E-------------------------
  1079. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INTERRUPT ON CHAR FROM HOST
  1080.     AX = 0003h subfn 0Eh
  1081.     DS:BX -> argument block (see below)
  1082. Return: AX = status (see AX=0003h/SF=00h)
  1083. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=14h
  1084.  
  1085. Format of argument block:
  1086. Offset    Size    Description
  1087.  00h    BYTE    session ID (00h)
  1088.  01h    BYTE    0Eh (function "interrupt on character from host")
  1089.  02h    DWORD    pointer to routine to be called (0000h:0000h = don't call)
  1090.  06h    DWORD    stack pointer to use when call is made
  1091. --------N-610003SF0F-------------------------
  1092. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START A SESSION
  1093.     AX = 0003h subfn 0Fh
  1094.     DS:BX -> argument block (see below)
  1095. Return: AX = status (see AX=0003h/SF=00h)
  1096. SeeAlso: AX=0003h/SF=04h,AX=0003h/SF=0Bh
  1097.  
  1098. Format of argument block:
  1099. Offset    Size    Description
  1100.  00h    BYTE    session ID (00h)
  1101.  01h    BYTE    0Fh (function "start a session")
  1102.  02h    WORD    pointer to information area in caller's current DS (see below)
  1103.  
  1104. Format of information area:
  1105. Offset    Size    Description
  1106.  00h    WORD    length of service name
  1107.  02h    WORD    pointer to service name in caller's DS
  1108.  04h    BYTE    type of connection (00h=connection name, 01h=dialout)
  1109.  05h    WORD    length of connection name/telephone number
  1110.  07h    WORD    pointer to connection name/telephone number
  1111. --------N-610003SF10-------------------------
  1112. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START/STOP PRINTING
  1113.     AX = 0003h subfn 10h
  1114.     DS:BX -> argument block (see below)
  1115. Return: AX = status (see AX=0003h/SF=00h)
  1116. SeeAlso: AX=0003h/SF=06h,AX=0003h/SF=13h
  1117.  
  1118. Format of argument block:
  1119. Offset    Size    Description
  1120.  00h    BYTE    session ID (00h)
  1121.  01h    BYTE    10h (function "start/stop printing of data received from host)
  1122.  02h    WORD    print capture flag (00h=off, 01h=on)
  1123. --------N-610003SF11-------------------------
  1124. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET FILE TRANSFER PARAMETERS
  1125.     AX = 0003h subfn 11h
  1126.     DS:BX -> argument block (see below)
  1127. Return: AX = status (see AX=0003h/SF=00h)
  1128. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=12h
  1129.  
  1130. Format of argument block:
  1131. Offset    Size    Description
  1132.  00h    BYTE    session ID (00h)
  1133.  01h    BYTE    11h (function "get file transfer parameters")
  1134.  02h    WORD    pointer to info area in caller's current DS (see below)
  1135.  
  1136. Format of info area:
  1137. Offset    Size    Description
  1138.  00h    BYTE    protocol flag (00h none, 01h Kermit)
  1139.  01h    BYTE    direction flag (00h send, 01h receive)
  1140.  02h    BYTE    length of null-terminated PC filename
  1141.  03h    DWORD    pointer to null-terminated PC filename
  1142.  07h    BYTE    length of null-terminated host filename
  1143.  08h    DWORD    pointer to null-terminated host filename
  1144. --------N-610003SF12-------------------------
  1145. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - GET CONNECTION INFORMATION
  1146.     AX = 0003h subfn 12h
  1147.     DS:BX -> argument block (see below)
  1148. Return: AX = status (see AX=0003h/SF=00h)
  1149. SeeAlso: AX=0003h/SF=11h,AX=0003h/SF=15h
  1150.  
  1151. Format of argument block:
  1152. Offset    Size    Description
  1153.  00h    BYTE    session ID (00h)
  1154.  01h    BYTE    12h (function "get connection information")
  1155.  02h    WORD    offset of buffer for connection information (see below)
  1156.  
  1157. Format of connection information:
  1158. Offset    Size    Description
  1159.  00h    WORD    length of service name (returned)
  1160.  02h    WORD    pointer to 64-byte buffer for service name
  1161.  04h    BYTE    type of connection
  1162.         00h connection name
  1163.         01h dialout
  1164.  05h    WORD    length of connection name/telephone number
  1165.  07h    WORD    pointer to 64-byte buffer for name/telno
  1166.  09h    BYTE    server line number being used (returned)
  1167. --------N-610003SF13-------------------------
  1168. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - START/STOP TRACING TRAFFIC
  1169.     AX = 0003h subfn 13h
  1170.     DS:BX -> argument block (see below)
  1171. Return: AX = status (see AX=0003h/SF=00h)
  1172. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=0Eh
  1173.  
  1174. Format of argument block:
  1175. Offset    Size    Description
  1176.  00h    BYTE    session ID (00h)
  1177.  01h    BYTE    13h (function "start/stop tracing data traffic in session")
  1178.  02h    BYTE    trace flag (00h=off, 01h=on)
  1179. --------N-610003SF14-------------------------
  1180. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - INTERRUPT ON HOST MESSAGE
  1181.     AX = 0003h subfn 14h
  1182.     DS:BX -> argument block (see below)
  1183. Return: AX = status (see AX=0003h/SF=00h)
  1184. SeeAlso: AX=0003h/SF=0Eh
  1185.  
  1186. Format of argument block:
  1187. Offset    Size    Description
  1188.  00h    BYTE    session ID (00h)
  1189.  01h    BYTE    14h (function "interrupt on message from host")
  1190.  02h    DWORD    pointer to routine to be called (0000h:0000h = don't call)
  1191.  06h    DWORD    stack pointer to use when call is made
  1192. --------N-610003SF15-------------------------
  1193. INT 61 - Banyan VINES - ASYNC TERMINAL EMULATION - RESET ERROR
  1194.     AX = 0003h subfn 15h
  1195.     DS:BX -> argument block (see below)
  1196. Return: AX = status (see AX=0003h/SF=00h)
  1197. SeeAlso: AX=0003h/SF=00h,AX=0003h/SF=12h
  1198.  
  1199. Format of argument block:
  1200. Offset    Size    Description
  1201.  00h    BYTE    session ID (00h)
  1202.  01h    BYTE    15h (function "reset error")
  1203. --------V-610003-----------------------------
  1204. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - REPORT ZOOM FACTOR
  1205.     AX = 0003h
  1206. Return: AX = zoom factor
  1207. Desc:    returns the current zoom factor
  1208. Notes:    INT 61h is the default interrupt; the actual interrupt number can be
  1209.       obtained by calling INT 16/AH=FFh
  1210.     not all vendors include the Tseng TSR which supports these functions
  1211. SeeAlso: AX=0000h"OPTIMA",AX=0005h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1212. --------N-610004-----------------------------
  1213. INT 61 - Banyan VINES - GET SERVER SERIAL NUMBER
  1214.     AX = 0004h
  1215.     DS:DX -> request block (function 0008h)
  1216. Return: AX = status
  1217.         0000h server ID returned in request block
  1218.         000Fh invalid drive
  1219.         0015h drive not ready
  1220.  
  1221. Format of request block:
  1222. Offset    Size    Description
  1223.  00h    WORD    0008h
  1224.  02h    WORD    drive number (0=default, 1=A, ...)
  1225.  04h  6 BYTEs    buffer for server ID
  1226. --------V-610004-----------------------------
  1227. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - ENTER SPECIFY MODE
  1228.     AX = 0004h
  1229. Notes:    Specify Mode is enabled by hot key (seeAlso below), and allows
  1230.       panning and zooming via the numeric keypad.
  1231.     INT 61 is the default interrupt; the actual interrupt number can be
  1232.       obtained by calling INT 16/AH=FFh
  1233.     not all vendors include the Tseng TSR which supports these functions
  1234. SeeAlso: AX=0000h"OPTIMA",AX=0007h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1235. --------N-610005-----------------------------
  1236. INT 61 - Banyan VINES - PRINTER CONTROL
  1237.     AX = 0005h
  1238.     DS:DX -> request block
  1239. Return: AX = status
  1240.         0000h successful
  1241.         0001h network software not installed or incompatible
  1242. SeeAlso: INT 2F/AX=D702h
  1243.  
  1244. Format of request block:
  1245. Offset    Size    Description
  1246.  00h    WORD    function
  1247.         0201h "endspool" all data for a print job has been sent
  1248.         0205h "getactive" get currently active printer port
  1249.  02h    WORD    number of active port (1-3)
  1250.  04h    WORD    ??? (0 for func 0201h, 3 for func 0205h)
  1251.  06h    WORD    0000h
  1252. --------V-610005-----------------------------
  1253. INT 61 - OPTIMA 1024 VGA-Sync - QUERY ZOOM WINDOW
  1254.     AX = 0005h
  1255.     BX:CX -> buffer for window parameters (see below)
  1256. Notes:    INT 61 is the default interrupt; the actual interrupt number can be
  1257.       obtained by calling INT 16/AH=FFh
  1258.     not all vendors include the Tseng TSR which supports these functions
  1259. SeeAlso: AX=0000h"OPTIMA",AX=0003h"OPTIMA",AX=0006h"OPTIMA"
  1260. SeeAlso: INT 16/AH=FFh"OPTIMA"
  1261.  
  1262. Format of window parameters:
  1263. Offset    Size    Description
  1264.  00h    WORD    X start of zoom window
  1265.  02h    WORD    Y start of zoom window
  1266.  04h    WORD    X end of zoom window
  1267.  06h    WORD    Y end of zoom window
  1268.  08h    WORD    current zoom factor
  1269.  0Ah    WORD    zoom offset start X
  1270.  0Ch    WORD    zoom offset start Y
  1271. --------V-610006-----------------------------
  1272. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - SET ZOOM WINDOW
  1273.     AX = 0006h
  1274.     BX:CX -> zoom window description (see below)
  1275. Notes:    width of zoom window must be a multiple of the pixel replication (zoom)
  1276.       factor
  1277.     INT 61 is the default interrupt; the actual interrupt number can be
  1278.       obtained by calling INT 16/AH=FFh
  1279.     not all vendors include the Tseng TSR which supports these functions
  1280. SeeAlso: AX=0000h"OPTIMA",AX=0001h"OPTIMA",AX=0005h"OPTIMA",AX=0008h"OPTIMA"
  1281. SeeAlso: INT 16/AH=FFh"OPTIMA"
  1282.  
  1283. Format of zoom window description:
  1284. Offset    Size    Description
  1285.  00h    WORD    X start of zoom window
  1286.  02h    WORD    Y start of zoom window
  1287.  04h    WORD    X end of zoom window
  1288.  06h    WORD    Y end of zoom window
  1289. --------V-610007-----------------------------
  1290. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - QUERY APPLICATION KEY
  1291.     AX = 0007h
  1292. Return: AX = current state (0000h/0001h)
  1293. Desc:    returns the current toggle state of the application (END) key in
  1294.       specify mode. E.g. in the OPTIMA AutoCAD driver, 0 means AutoCAD
  1295.       calls INT 61/AX=0001h every time the crosshair cursor moves.
  1296. Notes:    In specify mode, the END key has been reserved for applications.
  1297.     INT 61 is the default interrupt; the actual interrupt number can be
  1298.       obtained by calling INT 16/AH=FFh
  1299.     not all vendors include the Tseng TSR which supports these functions
  1300. SeeAlso: AX=0000h"OPTIMA",AX=0001h"OPTIMA",AX=0004h"OPTIMA"
  1301. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 7A/AX=0001h"AutoCAD"
  1302. --------N-610007BX0002-----------------------
  1303. INT 61 - Banyan VINES - GET PORTS FOR A SERVICE
  1304.     AX = 0007h
  1305.     BX = 0002h
  1306.     DS:DX -> StreetTalk service name
  1307.     DS:DI -> port record block (see below)
  1308. Return: AX = status (see below)
  1309. SeeAlso: AX=0007h/BX=0004h
  1310.  
  1311. Values for status:
  1312.  0000h    successful
  1313.  0001h    PC network software not installed or incompatible
  1314.  03E9h    incorrect name syntax
  1315.  03EAh    organization name too long
  1316.  03EBh    group name too long
  1317.  03ECh    item name too long
  1318.  03EDh    StreetTalk name too long
  1319.  03F3h    organization not found
  1320.  03F4h    group not found
  1321.  03F5h    StreetTalk name not found
  1322.  03F8h    not a StreetTalk name
  1323.  0409h    modify access denied
  1324.  040Dh    appropriate StreetTalk name unavailable
  1325.  
  1326. Format of port record block:
  1327. Offset    Size    Description
  1328.  00h    WORD    number of 17-byte elements
  1329.  02h 17 BYTEs    element (byte 00h = input port type, bytes 01h-10h = port)
  1330.         (see AX=0001h#"Sosock" for port format)
  1331. --------N-610007BX0004-----------------------
  1332. INT 61 - Banyan VINES - SET PORTS FOR A SERVICE
  1333.     AX = 0007h
  1334.     BX = 0004h
  1335.     DS:DX -> StreetTalk name of service
  1336.     DS:DI -> port record block (see below)
  1337. Return: AX = status (see AX=0007h/BX=0002h)
  1338. SeeAlso: AX=0007h/BX=0002h
  1339.  
  1340. Format of port record block:
  1341. Offset    Size    Description
  1342.  00h    WORD    number of 17-byte elements
  1343.  02h 17 BYTEs    element: byte 00h = input port type, 01h-10h = port
  1344.         (see AX=0001h#"Sosock" for port format)
  1345. --------N-610007BX0005-----------------------
  1346. INT 61 - Banyan VINES - GET USER NAME
  1347.     AX = 0007h
  1348.     BX = 0005h
  1349.     DS:DX -> 64-byte buffer for user's StreetTalk name
  1350. Return: AX = status
  1351.         0000h successful
  1352.         0001h network software not installed or incompatible
  1353. Note:    if no user logged in, first byte of returned name will be 00h
  1354. SeeAlso: AX=0007h/BX=0007h
  1355. --------N-610007BX0006-----------------------
  1356. INT 61 - Banyan VINES - TRANSLATE ERROR INTO ASCII STRING
  1357.     AX = 0007h
  1358.     BX = 0006h
  1359.     SI = error code (>100)
  1360.     DS:DX -> 80-byte buffer for error text
  1361. Return: AX = status
  1362.         0000h successful
  1363.         0001h network software not installed or incompatible
  1364. --------N-610007BX0007-----------------------
  1365. INT 61 - Banyan VINES - VERIFY EXISTENCE OF NAME AND RETURN CANONICAL FORM
  1366.     AX = 0007h
  1367.     BX = 0007h
  1368.     DS:DX -> NiceName block (see below)
  1369. Return: AX = status (see AX=0007h/BX=0002h)
  1370. SeeAlso: AX=0007h/BX=0005h,AX=0007h/BX=0008h
  1371.  
  1372. Format of NiceName block:
  1373. Offset    Size    Description
  1374.  00h    WORD    type of name
  1375.         0064h organization
  1376.         00C8h group
  1377.         012Ch item
  1378.  02h    WORD    pointer to ASCIZ input name
  1379.  04h    WORD    pointer to 64-byte buffer for output name
  1380. --------N-610007BX0008-----------------------
  1381. INT 61 - Banyan VINES - ENUMERATE StreetTalk NAMES
  1382.     AX = 0007h
  1383.     BX = 0008h
  1384.     DS:DX -> enumerate block (see below)
  1385. Return: AX = status
  1386.         0000h successful
  1387.         0411h all matching names have been returned
  1388.         0412h some groups unavailable, all available matches returned
  1389. Note:    each program using this call should continue until a nonzero status
  1390.       is returned; otherwise, some resources will not be freed for several
  1391.       hours
  1392. SeeAlso: AX=0007h/BX=0007h
  1393.  
  1394. Format of enumerate block:
  1395. Offset    Size    Description
  1396.  00h    WORD    return code
  1397.  02h    WORD    pointer to pattern string
  1398.  04h    WORD    enumerate type
  1399.         0064h organization
  1400.         00C8h group
  1401.         012Ch item
  1402.  06h    WORD    enumerate class
  1403.         0000h unspecified (return all matching items)
  1404.         0001h user names
  1405.         0002h service names
  1406.         0003h list names
  1407.         0004h nicknames
  1408.  08h    WORD    pointer to category criteria block (see below) or 0
  1409.  0Ah    WORD    pointer to array of 64-byte returned names
  1410.  0Ch    WORD    number of names returned
  1411.  0Eh  6 BYTEs    reserved for subsequent enumerated calls (set to zeros on first
  1412.           call)
  1413.  
  1414. Format of category criteria block:
  1415. Offset    Size    Description
  1416.  00h    WORD    exclude flag
  1417.         0000h return only items with the specified categories
  1418.         0001h return all items except those with the given categories
  1419.  02h    WORD    number of categories
  1420.  04h    WORD    category 1 value
  1421.  06h    WORD    category 2 value
  1422.         ...
  1423.  
  1424. Values for common service categories:
  1425.  0002h    file service
  1426.  0003h    print service
  1427.  0004h    mail service
  1428.  0005h    StreetTalk
  1429.  0006h    time service
  1430.  0008h    semaphore service
  1431.  0009h    3270/SNA service
  1432.  000Ah    asynchronous terminal emulation service
  1433.  000Ch    NETBIOS service
  1434.  000Dh    PC-based service
  1435. --------V-610008-----------------------------
  1436. INT 61 - OPTIMA 1024 VGA-Sync,ET-3000 chipset - SET ZOOM OFFSET
  1437.     AX = 0008h
  1438.     BX = X start of zoom offset
  1439.     CX = Y start of zoom offset
  1440. Desc:    specifies the first byte of video memory to appear in the zoom window
  1441. Notes:    INT 61 is the default interrupt; the actual interrupt number can be
  1442.       obtained by calling INT 16/AH=FFh
  1443.     not all vendors include the Tseng TSR which supports these functions
  1444. SeeAlso: AX=0000h"OPTIMA",AX=0006h"OPTIMA",INT 16/AH=FFh"OPTIMA"
  1445. --------N-610008BX0002-----------------------
  1446. INT 61 - Banyan VINES - POST MESSAGE ON LOCAL DISPLAY
  1447.     AX = 0008h
  1448.     BX = 0002h
  1449.     CX = flags
  1450.         bit 0: message will remain on screen until user presses ^X
  1451.         bit 1: ring bell after displaying message
  1452.         bit 2: blink
  1453.     DS:DX -> ASCIZ string to display (only first 80 chars used)
  1454. Return: AX = status
  1455.         0000h successful
  1456.         000Bh message display function currently busy
  1457.         000Ch message queue full
  1458. Note:    queues up to three messages to be displayed on the bottom line
  1459. SeeAlso: AX=0008h/BX=0003h
  1460. --------N-610008BX0003-----------------------
  1461. INT 61 - Banyan VINES - INTERCEPT VINES 25th-LINE MESSAGES AT LOCAL PC
  1462.     AX = 0008h
  1463.     BX = 0003h
  1464.     DS:DX -> request block
  1465. Return: AX = status
  1466.         0000h successful
  1467.         0001h network software not installed or incompatible
  1468. Notes:    message handler should not call BIOS or DOS functions, and should
  1469.       either call next handler or simply return
  1470.     to stop intercepting messages, set prev and next request blocks to
  1471.       point at each other
  1472. SeeAlso: AX=0008h/BX=0002h
  1473.  
  1474. Format of request block:
  1475. Offset    Size    Description
  1476.  00h    DWORD    pointer to user-written message handler
  1477.  04h    DWORD    pointer to next request block (filled in by VINES)
  1478.  08h    DWORD    pointer to previous request block (filled in by VINES)
  1479.  0Ch    DWORD    pointer to message storage area (filled by VINES) (see below)
  1480.  
  1481. Format of message storage area:
  1482. Offset    Size    Description
  1483.  00h 16 BYTEs    IPC port of message sender (see AX=0001h#"Sosock")
  1484.  10h    BYTE    message flags
  1485.  11h    WORD    reserved
  1486.  13h    BYTE    length of message
  1487.  14h 80 BYTEs    message text
  1488. --------N-61000A-----------------------------
  1489. INT 61 - Banyan VINES - SECONDARY 3270 INTERFACE
  1490.     AX = 000Ah
  1491. Note:    either 3270/SNA or 3270/BSC interface will use AX=000Ah, depending on
  1492.       which is loaded second.  The first interface loaded will use AX=0002h
  1493. SeeAlso: INT 61/AX=0002h
  1494. --------N-6101-------------------------------
  1495. INT 61 - Banyan VINES - CHECK SERVICE
  1496.     AH = 01h
  1497.     AL = service ID (see below)
  1498. Return: AX = status
  1499.         0000h installed
  1500.         0001h not installed
  1501.         0002h invalid ID
  1502.  
  1503. Values for service ID:
  1504.  01h    communications
  1505.  02h    primary 3270 emulation
  1506.  03h    async terminal emulation
  1507.  04h    file deflection
  1508.  07h    StreetTalk
  1509.  08h    environment
  1510.  0Ah    secondary 3270 emulation
  1511.  0Bh    semaphore service
  1512.  0Ch    3270 emulation active status
  1513.  0Dh    3270 keyboard interrupt simulator
  1514. --------N-6101--BX0000-----------------------
  1515. INT 61 u - PC/TCP kernel v2.1+ - "net_config" - CONFIGURE RUNNING KERNEL
  1516.     AH = 01h
  1517.     BX = 0000h
  1518.     DH = tag number
  1519.     DL = device number
  1520.     DS:SI -> buffer to send to kernel
  1521.     ES:DI -> integer containing size of buffer
  1522. Return: CF clear if successful
  1523.     CF set on error
  1524.         AX = error code (see INT 61"PC/TCP")
  1525. Notes:    there are a large number of tags available; the items returned
  1526.       all refer to local kernel configuration, and are not needed in
  1527.       normal use.
  1528.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1529. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=02"PC/TCP"
  1530. --------N-6102-------------------------------
  1531. INT 61 - Banyan VINES - GET REVISION NUMBER
  1532.     AH = 02h
  1533.     DS:DX -> 2-byte buffer for result
  1534. Return: AX = 0000h installed
  1535.         DS:DX buffer contains revision number as
  1536.         10000d * major_ver + 100d * minor_ver + patch_revision
  1537. --------N-6102--BX0000-----------------------
  1538. INT 61 u - PC/TCP kernel v2.1+ - "get_kernel_info" - GET MISCELLAN LOCAL INFO
  1539.     AH = 02h
  1540.     BX = 0000h
  1541.     DH = tag number
  1542.     DL = device number
  1543.     DS:SI -> buffer for result (up to 48 bytes for version <= 2.2)
  1544.     ES:DI -> integer containing size of buffer
  1545. Return: CF clear if successful
  1546.         Data loaded into specified buffer, and size value altered
  1547.     CF set on error
  1548.         AX = error code (see INT 61"PC/TCP")
  1549. Notes:    there are a large number of tags available; the items returned
  1550.       all refer to local kernel configuration, and are not needed in
  1551.       normal use.
  1552.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1553. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=01h"PC/TCP"
  1554. --------N-6105-------------------------------
  1555. INT 61 - PC/TCP kernel v2.05+ - "get_addr" - GET INTERNET ADDRESS OF NET DESCR
  1556.     AH = 05h
  1557.     BX = network descriptor
  1558. Return: CF clear if successful
  1559.         DX:AX = Internet address of ND
  1560.     CF set on error
  1561.         AX = error code (see INT 61"PC/TCP")
  1562. Notes:    the installation check consists of testing for the signature "TCPTSR"
  1563.       three bytes beyond the start of the interrupt handler
  1564.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  1565.       interrupt from 20h through E0h
  1566. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=16h"PC/TCP"
  1567. SeeAlso: INT 63/AH=25h"BW-TCP"
  1568. --------N-6106-------------------------------
  1569. INT 61 - PC/TCP kernel v2.05 - "net_info" - GET INTERFACE STATISTICS
  1570.     AH = 06h
  1571.     BX = network descriptor (must be allocated and open)
  1572.     DS:SI -> 38-byte buffer (see below)
  1573. Return: CF clear if successful
  1574.         buffer filled
  1575.     CF set on error
  1576.         AX = error code (see INT 61"PC/TCP")
  1577. Desc:    returns the statistics relevant to the particular network interface
  1578.        used by the specified network descriptor
  1579. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=05h"PC/TCP"
  1580.  
  1581. Format of buffer:
  1582. Offset    Size    Description
  1583.  00h    WORD    interface class (e.g. 802.3)
  1584.  02h    WORD    type (manufacturer) of interface
  1585.  04h    WORD    interface number
  1586.  06h    DWORD    (big-endian) IP address of interface
  1587.  0Ah    DWORD    subnet mask
  1588.  0Eh    WORD    0001h if interface is up
  1589.  10h    DWORD    total packets received
  1590.  14h    DWORD    total packets sent
  1591.  18h    DWORD    receive errors
  1592.  1Ch    DWORD    send errors
  1593.  20h    WORD    length of local net address (e.g. 0006h for Ethernet)
  1594.  22h    DWORD    pointer to local net address
  1595. --------N-6107-------------------------------
  1596. INT 61 - PC/TCP kernel v2.05+ - "net_globalize" - MAKE NET DESCRIPTOR GLOBAL
  1597.     AH = 07h
  1598.     BX = local network descriptor
  1599. Return: CF clear if successful
  1600.         AX = global network descriptor
  1601.     CF set on error
  1602.         AX = error code (see INT 61"PC/TCP")
  1603. Notes:    the new network descriptor can be accessed from all processes and is
  1604.       independent of DOS
  1605.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1606. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1607. SeeAlso: INT 61/AH=29h
  1608. --------N-6108-------------------------------
  1609. INT 61 - PC/TCP kernel v2.05+ - "net_release" - CLOSE A NETWORK DESCRIPTOR
  1610.     AH = 08h
  1611.     BX = network descriptor
  1612. Return: CF clear if successful
  1613.         AX = 0000h (BWPCTCP shim)
  1614.     CF set on error
  1615.         AX = error code (see INT 61"PC/TCP")
  1616. Note:    the descriptor will be closed and resources released.  If a stream
  1617.       descriptor, the protocol (FIN etc) is completed unless the
  1618.       non-blocking option has been set.
  1619. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=09h"PC/TCP"
  1620. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1621. --------N-6109-------------------------------
  1622. INT 61 - PC/TCP kernel v2.05+ - "net_releaseall" - CLOSE ALL NON-GLOBAL DESCRS
  1623.     AH = 09h
  1624. Return: CF clear
  1625. Notes:    this call performs function 08h on every non-global network descriptor.
  1626.       Global descriptors must be released individually.
  1627.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  1628.       interrupt from 20h through E0h
  1629. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1630. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1631. --------N-610A-------------------------------
  1632. INT 61 - PC/TCP kernel v2.05 - "net_send" - ???
  1633.     AH = 0Ah
  1634.     ???
  1635. Return: ???
  1636. Notes:    this function is described as "unused" in the v2.05 and v2.2
  1637.       documentation
  1638.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1639. SeeAlso: AH=0Bh
  1640. --------N-610B-------------------------------
  1641. INT 61 - PC/TCP kernel v2.05 - "net_sendto" - ???
  1642.     AH = 0Bh
  1643.     ???
  1644. Return: ???
  1645. Notes:    this function is described as "unused" in the v2.05 and v2.2
  1646.       documentation
  1647.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1648. SeeAlso: AH=0Ah
  1649. --------N-610C-------------------------------
  1650. INT 61 u - PC/TCP kernel v2.05+ - "net_stat" - GET CONNECTION STATISTICS
  1651.     AH = 0Ch
  1652.     BX = network descriptor or one of the following:
  1653.         FFFCh for kernel ICMP statistics
  1654.         FFFDh for kernel UDP statistics
  1655.         FFFEh for kernel IP statistics
  1656.         FFFFh for kernel TCP statistics
  1657.     DS:DX -> 64-byte buffer
  1658. Return: CF clear if successful
  1659.         buffer filled
  1660.     CF set on error
  1661.         AX = error code (see INT 61"PC/TCP")
  1662. Notes:    the fields filled in for a network descriptor depend on the protocol
  1663.       family used by that descriptor's connection
  1664.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1665. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1666.  
  1667. Format of kernel TCP statistics:
  1668. Offset    Size    Description
  1669.  00h 16 BYTEs    unused
  1670.  10h    DWORD    bytes sent
  1671.  14h    DWORD    bytes received
  1672.  18h  8 BYTEs    unused
  1673.  20h    DWORD    packets sent
  1674.  24h    DWORD    packets received
  1675.  28h    DWORD    bad checksums
  1676.  2Ch    DWORD    count of window ignored by remote
  1677.  30h    DWORD    timeouts
  1678.  34h    DWORD    resets
  1679.  38h    DWORD    duplicate packets
  1680.  3Ch    DWORD    retransmits
  1681.  
  1682. Format of kernel IP statistics:
  1683. Offset    Size    Description
  1684.  00h  8 BYTEs    unused
  1685.  08h    DWORD    invalid IP header length errors
  1686.  0Ch    DWORD    protocol errors (unwanted packets)
  1687.  10h    DWORD    duplicate fragments received
  1688.  14h    DWORD    bad fragments received
  1689.  18h    DWORD    security errors
  1690.  1Ch    DWORD    count of bad IP addresses received
  1691.  20h    DWORD    packets sent
  1692.  24h    DWORD    packets received
  1693.  28h    DWORD    bad checksums received
  1694.  2Ch    DWORD    total IP protocol errors
  1695.  30h    DWORD    fragmentation errors
  1696.  34h    DWORD    IP packets discarded + bad security + bad fragments
  1697.  38h    DWORD    fragments received
  1698.  3Ch  4 BYTEs    unused
  1699.  
  1700. Format of kernel UDP statistics:
  1701. Offset    Size    Description
  1702.  00h 28 BYTEs    unused
  1703.  1Ch    DWORD    packets dropped for lack of buffers
  1704.  20h    DWORD    packets sent
  1705.  24h    DWORD    packets received
  1706.  28h    DWORD    bad checksums
  1707.  2Ch    DWORD    port not listening errors
  1708.  30h  4 BYTEs    unused
  1709.  34h    DWORD    truncated receives
  1710.  38h  8 BYTEs    unused
  1711.  
  1712. Format of kernel ICMP statistics:
  1713. Offset    Size    Description
  1714.  00h    DWORD    "TimeEx" sent
  1715.  04h    DWORD    "TimeEx" received
  1716.  08h    DWORD    "ParamProb" sent
  1717.  0Ch    DWORD    "ParamProb" received
  1718.  10h    DWORD    redirects received
  1719.  14h    DWORD    source quenches received
  1720.  18h    DWORD    ICMP Echo Requests ("ping") sent
  1721.  1Ch    DWORD    ICMP Echo Requests received
  1722.  20h    DWORD    packets sent
  1723.  24h    DWORD    packets received
  1724.  28h    DWORD    bad packets received
  1725.  2Ch    DWORD    "DestUn" received
  1726.  30h    DWORD    packet send errors
  1727.  34h    DWORD    "DestUn" sent
  1728.  38h    DWORD    ICMP Echo replies received
  1729.  3Ch    DWORD    ICMP Echo replies sent
  1730. --------N-610D-------------------------------
  1731. INT 61 - PC/TCP kernel v2.05+ - "is_netnd" - CHECK IF NETWORK DESCRIPTOR VALID
  1732.     AH = 0Dh
  1733.     BX = possible network descriptor
  1734. Return: CF clear if valid
  1735.     CF set on error
  1736.         AX = error code (see INT 61"PC/TCP")
  1737. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=08h"PC/TCP"
  1738. SeeAlso: INT 61/AH=22h
  1739. --------N-610E-------------------------------
  1740. INT 61 - PC/TCP kernel v2.05+ - "net_select" - DETECT READINESS OF NETWORK
  1741.     AH = 0Eh
  1742.     BX = maximum value of network descriptor for which to return info
  1743.     DS:DX -> 32-bit (max) array of bit flags for read readiness
  1744.     ES:DI -> 32-bit (max) array of bit flags for write readiness
  1745. Return: CF clear
  1746. Notes:    bits in the DS:DX buffer are set if the corresponding network
  1747.       descriptor may be read without blocking; bits in the ES:DI buffer
  1748.       are set if the corresponding network descriptor may be written
  1749.       without blocking.  This implies that the network descriptor has
  1750.       opened correctly and the protocol initialized.
  1751.     the installation check consists of testing for the signature "TCPTSR"
  1752.       three bytes beyond the start of the interrupt handler
  1753.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  1754.       interrupt from 20h through E0h
  1755. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1756. --------N-610F-------------------------------
  1757. INT 61 - PC/TCP kernel v2.05+ - "get_netversion" - GET SOFTWARE VERSION
  1758.     AH = 0Fh
  1759. Return: CF clear
  1760.     AX = version (AH = major, AL = minor)
  1761.     BX = patch level
  1762. Notes:    patch levels are no longer used starting with version 2.10; instead,
  1763.       the minor version level is incremented.
  1764.     Beame&Whiteside's BWPCTCP v3.0a shim reports version 2.05, but does not
  1765.       set BX
  1766. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1767. --------N-6110-------------------------------
  1768. INT 61 - PC/TCP kernel v2.05+ - "net_shutdown" - UNINSTALL
  1769.     AH = 10h
  1770. Return: CF clear if successful
  1771.     CF set on error
  1772.         AX = error code (see INT 61"PC/TCP")
  1773. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1774. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1775. --------N-6111-------------------------------
  1776. INT 61 - PC/TCP kernel v2.05+ - "disable_async" - DISABLE ASYNCHRONOUS HANDLERS
  1777.     AH = 11h
  1778. Return: CF clear
  1779.     AX = previous state
  1780.         0000h async calls were already disabled
  1781.         else  async calls were enabled
  1782. SeeAlso: INT 61"PC/TCP",INT 61/AH=12h
  1783. --------N-6112-------------------------------
  1784. INT 61 - PC/TCP kernel v2.05+ - "enable_async" - ENABLE ASYNCHRONOUS HANDLERS
  1785.     AH = 12h
  1786. Return: CF clear
  1787.     AX = previous state
  1788.         0000h async calls were disabled
  1789.         else  async calls were already enabled
  1790. SeeAlso: INT 61"PC/TCP",INT 61/AH=11h
  1791. --------N-6113-------------------------------
  1792. INT 61 - PC/TCP kernel v2.05 - "net_connect" - OPEN A NETWORK CONNECTION
  1793.     AH = 13h
  1794.     BX = network descriptor (FFFFh for automatic net_getdesc)
  1795.     DX = protocol (see below)
  1796.     DS:SI -> buffer for "addr" structure (see below)
  1797. Return: CF clear if successful
  1798.         AX = network descriptor used or allocated
  1799.     CF set on error
  1800.         AX = error code (see INT 61"PC/TCP")
  1801. Notes:    invokes AH=22h if BX=FFFFh on entry; also invokes AH=19h in various
  1802.       cases
  1803.     will wait for protocol on stream connections unless non-blocking was
  1804.       set with AH=20h
  1805. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=18h,INT 61/AH=23h
  1806. SeeAlso: INT 63/AH=14h"BW-TCP"
  1807.  
  1808. Values for protocol:
  1809.  0001h    raw net (undocumented)
  1810.  0002h    raw IP
  1811.  0003h    datagram (UDP)
  1812.  0004h    stream (TCP)
  1813.  0005h    raw ICMP
  1814.  
  1815. Format of structure "addr":
  1816. Offset    Size    Description
  1817.  00h    DWORD    Internet address (network order)
  1818.  04h    WORD    remote socket number (network order)
  1819.  06h    WORD    local socket number (network order) 0000h means "you choose"
  1820.  08h    BYTE    protocol (see above)
  1821. --------N-6114-------------------------------
  1822. INT 61 Ou - PC/TCP kernel v2.05 - "net_recv" - NO LONGER SUPPORTED
  1823.     AH = 14h
  1824.     BX = network descriptor
  1825. Return: CF set
  1826.         AX = 0018h (see INT 61"PC/TCP")
  1827. Notes:    displays error message "Illegal system call!  Please upgrade your
  1828.       PCserver software" to standard output
  1829.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1830. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=0Ah,INT 61/AH=15h
  1831. --------N-6115-------------------------------
  1832. INT 61 - PC/TCP kernel v2.05 - "net_recvfrom" - ???
  1833.     AH = 15h
  1834.     ???
  1835. Return: ???
  1836. Notes:    this function is described as "unused" in the v2.2 documentation
  1837.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1838. SeeAlso: INT 61/AH=0Bh,INT 61/AH=14h
  1839. --------N-6116-------------------------------
  1840. INT 61 - PC/TCP kernel v2.05+ - "net_peer" - GET DATA ON REMOTE PEER
  1841.     AH = 16h
  1842.     BX = network descriptor
  1843.     DS:DX -> 9-byte buffer for "addr" structure (see AH=13h)
  1844. Return: CF clear if successful
  1845.         buffer filled
  1846.     CF set on error
  1847.         AX = error code (see INT 61"PC/TCP")
  1848. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1849. --------N-6117-------------------------------
  1850. INT 61 - PC/TCP kernel v2.05+ - "net_reconfig" - RE-READ KERNEL CONFIGURATION
  1851.     AH = 17h
  1852. Return: CF clear if successful
  1853.     CF set on error
  1854.         AX = error code (see INT 61"PC/TCP")
  1855. Notes:    this routine is deprecated in v2.1+ and will eventually be withdrawn;
  1856.       in v2.1+, this function calls AH=01h which should be used instead
  1857.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1858. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=01h"PC/TCP"
  1859. --------N-6118-------------------------------
  1860. INT 61 - PC/TCP kernel v2.05+ - "net_eof" - CLOSE TRANSMIT SIDE OF CONNECTION
  1861.     AH = 18h
  1862.     BX = network descriptor
  1863. Return: CF clear if successful
  1864.     CF set on error
  1865.         AX = error code (see INT 61"PC/TCP")
  1866. Note:    a TCP "FIN" command is sent and no further data may be transmitted,
  1867.       although the connection remains open
  1868. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h"PC/TCP"
  1869. SeeAlso: INT 63/AH=0Eh"BW-TCP"
  1870. --------N-6119-------------------------------
  1871. INT 61 - PC/TCP kernel v2.05+ - "net_abort" - RESET A NETWORK CONNECTION
  1872.     AH = 19h
  1873.     BX = network descriptor
  1874. Return: CF clear if successful
  1875.     CF set on error
  1876.         AX = error code (see INT 61"PC/TCP")
  1877. Desc:    immediately destroys the specified connection
  1878. Note:    send a TCP "RST" command if a stream connection is open
  1879. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=24h
  1880. --------N-611A-------------------------------
  1881. INT 61 - PC/TCP kernel v2.05+ - "net_write" - WRITE TO THE NETWORK
  1882.     AH = 1Ah
  1883.     BX = network descriptor
  1884.     CX = number of bytes to transmit (0000h allowed)
  1885.     DX = send options (see below)
  1886.     DS:SI -> data to be written
  1887. Return: CF clear if successful
  1888.         AX = number of bytes actually written
  1889.         DX = ???
  1890.     CF set on error
  1891.         AX = error code (see INT 61"PC/TCP")
  1892. Notes:    the installation check consists of testing for the signature "TCPTSR"
  1893.       three bytes beyond the start of the interrupt handler
  1894.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  1895.       interrupt from 20h through E0h
  1896. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  1897. SeeAlso: INT 63/AH=19h"BW-TCP",INT 63/AH=1Bh"BW-TCP"
  1898.  
  1899. Bitfields for send options:
  1900.  bit 0    signal "URG"ent data
  1901.  bit 3    attempt rerouting on non-stream calls if first attempt fails
  1902.  bit 4    send data with PUSH flag (no override of Nagle)
  1903.     (see option 0Ch)
  1904.  bit 5    fail rather than truncating datagram
  1905.  bit 6    fail rather than blocking
  1906.  bit 7    broadcast packet
  1907. --------N-611B-------------------------------
  1908. INT 61 - PC/TCP kernel v2.05+ - "net_read" - READ FROM THE NETWORK
  1909.     AH = 1Bh
  1910.     BX = network descriptor
  1911.     CX = maximum number of bytes to read
  1912.     DX = receive options (see below)
  1913.     DS:SI -> buffer for data
  1914.     ES:DI -> "addr" structure (see AH=13h) for remote from which to read
  1915.         0000h:0000h for any
  1916. Return: CF clear if successful
  1917.         AX = number of bytes actually read
  1918.         DX = ???
  1919.     CF set on error
  1920.         AX = error code (see INT 61"PC/TCP")
  1921. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  1922.  
  1923. Bitfields for receive options:
  1924.  bit 1    do not remove data from queue, just copy it
  1925.  bit 2    do not copy data, just remove it from queue
  1926.  bit 5    fail if datagram would be truncated
  1927.  bit 6    do not block, return error if no data available
  1928. Note:    special case for UDP: if both bits 1 and 2 set, return num of datagrams
  1929. --------N-611C-------------------------------
  1930. INT 61 - PC/TCP kernel v2.05+ - "net_writeto" - WRITE A DATAGRAM
  1931.     AH = 1Ch
  1932.     BX = network descriptor
  1933.     CX = number of bytes to transmit (0000h allowed)
  1934.     DX = send options (see AH=1Ah)
  1935.     DS:SI -> data to be written
  1936.     ES:DI -> "addr" structure (see AH=13h)
  1937. Return: CF clear if successful
  1938.         AX = number of bytes actually written
  1939.         DX = ???
  1940.     CF set on error
  1941.         AX = error code (see INT 61"PC/TCP")
  1942. Note:    this function differs from AH=1Ah in that the address and socket
  1943.       numbers can be overridden
  1944. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  1945. SeeAlso: INT 63/AH=21h"BW-TCP"
  1946. --------N-611D-------------------------------
  1947. INT 61 - PC/TCP kernel v2.05+ - "net_readfrom" - READ A DATAGRAM
  1948.     AH = 1Dh
  1949.     BX = network descriptor
  1950.     CX = maximum number of bytes to read
  1951.     DX = receive options (see AH=1Bh)
  1952.     DS:SI -> buffer for received data
  1953.     ES:DI -> 9-byte buffer containing "addr" structure (see AH=13h)
  1954. Return: CF clear if successful
  1955.         AX = number of bytes read
  1956.         DX = ???
  1957.     CF set on error
  1958.         AX = error code (see INT 61"PC/TCP")
  1959. Notes:    this function can read from any host or a designated host depending
  1960.       on settings in the "addr" structure
  1961.     only for use with datagram or Raw descriptors
  1962. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  1963. --------N-611E-------------------------------
  1964. INT 61 - PC/TCP kernel v2.05+ - "net_flush" - FLUSH PENDING DATA
  1965.     AH = 1Eh
  1966.     BX = network descriptor
  1967. Return: CF clear if successful
  1968.     CF set on error
  1969.         AX = error code (see INT 61"PC/TCP")
  1970. Notes:    bufferred data is transmitted immediately, overriding Nagle's algorithm
  1971.       if necessary
  1972.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  1973. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1974. --------N-611F-------------------------------
  1975. INT 61 - PC/TCP kernel v2.05+ - "net_asynch" - SET UP ASYNCHRONOUS CALL-BACK
  1976.     AH = 1Fh
  1977.     BX = network descriptor
  1978.     CX = event type (see below)
  1979.     DS:SI -> event handler routine
  1980.     ES:DI = 32-bit hint passed to handler
  1981. Return: CF clear if successful
  1982.         DS:DX -> previous handler
  1983.     CF set on error
  1984.         AX = error code (see INT 61"PC/TCP")
  1985. Note:    ICMP messages do not trigger events on stream connections
  1986. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  1987.  
  1988. Values for event type:
  1989.  00h    alarm
  1990.  01h    open (successfully opened stream connection)
  1991.  02h    receive (data available)
  1992.  03h    transmit (ACK received on stream connection)
  1993.  04h    transmit flush???
  1994.  05h    foreign close (remote host closed data connection)
  1995.  06h    close (local host closed connection and protocol is complete)
  1996.  07h    error (error code passed to handler as arg)
  1997.  
  1998. Event handler called with:
  1999.     BX = network descriptor
  2000.     CX = event type (see above)
  2001.     DS:DX -> arg
  2002.     ES:DI = 32-bit hint value
  2003.     STACK:    small stack, possibly the DOS stack
  2004. --------N-6120-------------------------------
  2005. INT 61 - PC/TCP kernel v2.05+ - "set_option" - SET AN OPTION ON A DESCRIPTOR
  2006.     AH = 20h
  2007.     BX = network descriptor
  2008.     CX = length of buffer (usually 04h)
  2009.     DS:DX -> buffer containing option
  2010.     SI = (ignored by v2.2-)
  2011.     DI = option to set (see below)
  2012. Return: CF clear if successful
  2013.     CF set on error
  2014.         AX = error code (see INT 61"PC/TCP")
  2015. Note:    Beame&Whiteside's BWPCTCP shim only supports options 01h and 0Bh; all
  2016.       others return CF clear
  2017. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=21h
  2018.  
  2019. Values for option to set:
  2020.  01h    set non-blocking mode if non-zero
  2021.  02h    timeout of call in milliseconds
  2022.  03h    user-defined 4-byte magic cookie (not used by kernel)
  2023.  04h    TCP window or UDP buffer count (WORD, unsigned)
  2024.  06h    do TCP keep-alives if non-zero
  2025.  09h    (v2.1+) set IP precedence
  2026.  0Ah    (v2.1+) set IP type of service
  2027.  0Bh    use a privileged port if port = 0
  2028.  0Ch    turn off TCP PUSH bit and don't flush buffer every write (see AH=1Ah)
  2029. Note:    use "C" true or false values for boolean options
  2030. --------N-6121-------------------------------
  2031. INT 61 - PC/TCP kernel v2.05+ - "get_option" - GET OPTIONS APPLIED TO NET DESCR
  2032.     AH = 21h
  2033.     BX = network descriptor
  2034.     CX = length of buffer
  2035.     DS:DX -> buffer for return values
  2036.     SI = 0004h (ignored by v2.2-)
  2037.     DI = option (see AH=20h)
  2038. Return: CF clear if successful
  2039.         DS:DX -> value (usually 32 bits) returned by selected option
  2040.     CF set on error
  2041.         AX = error code (see INT 61"PC/TCP")
  2042. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2043. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=20h
  2044. --------N-6122-------------------------------
  2045. INT 61 u - PC/TCP kernel v2.05+ - "net_getdesc" - ALLOCATE NETWORK DESCRIPTOR
  2046.     AH = 22h
  2047. Return: CF clear if successful
  2048.         AX = network descriptor
  2049.     CF set on error
  2050.         AX = error code (see INT 61"PC/TCP")
  2051. Note:    the descriptor will be an integer in the range 00h-1Fh, and a DOS call
  2052.       is made to allocate this as a file descriptor.  Hence a number may
  2053.       not refer to a PC/TCP network descriptor and a DOS file handle
  2054.       simultaneously.
  2055. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h,INT 61/AH=29h
  2056. --------N-6123-------------------------------
  2057. INT 61 - PC/TCP kernel v2.05+ - "net_listen" - LISTEN FOR INCOMING CONNECTIONS
  2058.     AH = 23h
  2059.     BX = network descriptor or FFFFh to allocate descriptor
  2060.     DX = type of service
  2061.     DS:SI -> "addr" structure (see AH=13h)
  2062. Return: CF clear if successful
  2063.         AX = network descriptor
  2064.     CF set on error
  2065.         AX = error code (see INT 61"PC/TCP")
  2066. Notes:    type of service and "addr" structure are as for AH=13h
  2067.     any of the address structure can be zero; normally local socket number
  2068.       is filled in prior to call
  2069. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h
  2070. SeeAlso: INT 63/AH=12h"BW-TCP"
  2071. --------N-6124-------------------------------
  2072. INT 61 - PC/TCP kernel v2.05+ - "net_abortall" - RESET ALL NETWORK CONNECTIONS
  2073.     AH = 24h
  2074. Return: always successful
  2075. Note:    performs "net_abort" (AH=19h) on all open non-global descriptors
  2076. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=19h
  2077. --------N-6125-------------------------------
  2078. INT 61 - PC/TCP kernel v2.05+ - "ad_res_name" - GET HOST NAME GIVEN ADDRESS
  2079.     AH = 25h
  2080.     DX,BX = IP address in network order
  2081.     CX = length of buffer for name
  2082.     DS:SI -> buffer for host name
  2083. Return: CF clear if successful
  2084.        buffer filled with ASCIZ host name
  2085.     CF set on error
  2086.         AX = error code (see INT 61"PC/TCP")
  2087. Note:    this function will use the host table and or DNS to resolve the
  2088.       address, depending on kernel configuration.  Use this call for the
  2089.       normal gethostbyaddr function.
  2090. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=26h,INT 61/AH=27h
  2091. --------N-6126-------------------------------
  2092. INT 61 - PC/TCP kernel v2.05+ - "ad_htable" - GET HOST NAME FROM LOCAL TABLE
  2093.     AH = 26h
  2094.     DX,BX = IP address in network order
  2095.     CX = length of buffer
  2096.     DS:SI -> buffer for host name
  2097. Return: CF clear if successful
  2098.         buffer filled with ASCIZ host name
  2099.     CF set on error
  2100.         AX = error code (see INT 61"PC/TCP")
  2101. Notes:    normally one would use AH=25h instead of this function
  2102.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2103. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=25h,INT 61/AH=27h
  2104. --------N-6127-------------------------------
  2105. INT 61 - PC/TCP kernel v2.05+ - "ad_domain" - GET HOST NAME FROM DNS
  2106.     AH = 27h
  2107.     DX,BX = IP address in network order
  2108.     CX = length of buffer
  2109.     DS:SI -> buffer for host name
  2110. Return: CF clear if successful
  2111.         buffer filled with ASCIZ host name
  2112.     CF set on error
  2113.         AX = error code (see INT 61"PC/TCP")
  2114. Note:    normally one would use AH=25h instead of this function
  2115. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=25h,INT 61/AH=26h
  2116. --------N-6128-------------------------------
  2117. INT 61 - PC/TCP kernel v2.05+ - "net_swap" - EXCHANGE TWO NETWORK DESCRIPTORS
  2118.     AH = 28h
  2119.     BX = network descriptor 1
  2120.     CX = network descriptor 2
  2121. Return: CF clear if successful
  2122.     CF set on error
  2123.         AX = error code (see INT 61"PC/TCP")
  2124. Note:    the two descriptors will exchange places; both must be local or both
  2125.       global
  2126. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2127. --------N-6129-------------------------------
  2128. INT 61 - PC/TCP kernel v2.05+ - "net_getglobdesc" - ALLOCATE GLOBAL DESCRIPTOR
  2129.     AH = 29h
  2130. Return: CF clear if successful
  2131.         AX = network descriptor
  2132.     CF set on error
  2133.         AX = error code (see INT 61"PC/TCP")
  2134. Note:    use this function rather than AH=22h to avoid a DOS call by the PC/TCP
  2135.       kernel; the returned descriptor will be >= 40h and cannot be used
  2136.       with "net_select" (AH=0Eh)
  2137. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=07h"PC/TCP"
  2138. SeeAlso: INT 61/AH=22h
  2139. --------N-612A-------------------------------
  2140. INT 61 - PC/TCP kernel v2.05+ - GET CONFIGURATION INFORMATION
  2141.     AH = 2Ah
  2142.     DS:SI -> 26-byte buffer for configuration information (see below)
  2143. Return: CF clear
  2144.     AX = 0000h
  2145.     buffer filled
  2146. Notes:    size of buffer may vary with kernel version; 26 bytes is the size for
  2147.       versions 2.05 through 2.2
  2148.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2149. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2150.  
  2151. Format of configuration information:
  2152. Offset    Size    Description
  2153.  00h    BYTE    maximum TCP connections available
  2154.  01h    BYTE    maximum UDP connections available
  2155.  02h    BYTE    maximum IP connections available
  2156.  03h    BYTE    maximum Raw Net connections available
  2157.  04h    BYTE    number of TCP connections currently in use
  2158.  05h    BYTE    number of UDP connections currently in use
  2159.  06h    BYTE    number of IP connections currently in use
  2160.  07h    BYTE    number of Raw Net connections currently in use
  2161.  08h    WORD    number of local network descriptors active
  2162.  0Ah    WORD    number of global network descriptors active
  2163.  0Ch    BYTE    maximum header size on network
  2164.  0Dh    BYTE    maximum trailer size on network
  2165.  0Eh    WORD    size of large packet buffer
  2166.  10h    WORD    number of network interfaces attached
  2167.  12h    DWORD    milliseconds since kernel started
  2168.  16h    DWORD    IP broadcast address
  2169. --------N-612B-------------------------------
  2170. INT 61 - PC/TCP kernel v2.02+ - "net_alarm" - SET TIMED ASYNCHRONOUS EVENT
  2171.     AH = 2Bh
  2172.     BX = network descriptor
  2173.     CX,DX = time before alarm in milliseconds
  2174.     DS:SI -> handler which will receive call (see INT 61/AH=1Fh)
  2175.     ES:DI = 32-bit cookie passed to handler
  2176. Return: CF clear if successful
  2177.     CF set on error
  2178.         AX = error code (see INT 61"PC/TCP")
  2179. Notes:    this function will cause a NET_AS_ALARM to be generated; it is intended
  2180.       for TSRs, etc. to regain control periodically
  2181.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2182. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2183. --------N-6130-------------------------------
  2184. INT 61 - PC/TCP kernel v2.05+ - "icmp_ping" - SEND ICMP ECHO REQUEST (PING)
  2185.     AH = 30h
  2186.     BX,DX = IP address of host
  2187.     CX = length of data to send
  2188. Return: CF clear if successful (i.e. reply received)
  2189.     CF set on error
  2190.         AX = error code (see INT 61"PC/TCP")
  2191. Note:    this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2192. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  2193. --------N-61---------------------------------
  2194. INT 61 u - PC/TCP kernel v2.05 - NOP for SLIP kernel
  2195.     AH = function
  2196.         31h "net_add_route"
  2197.         32h "net_del_route"
  2198.         33h "net_dump_routes"
  2199. Notes:    these functions are described as "unused" in the v2.2 documentation
  2200.     router configuration can be altered using INT 61/AH=01h
  2201.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2202. --------N-6134-------------------------------
  2203. INT 61 U - PC/TCP kernel v2.1+ - "icmp_destun" - ???
  2204.     AH = 34h
  2205.     ???
  2206. Return: ???
  2207. Notes:    this function is described as "reserved" in the v2.2 documentation
  2208.     this function is not supported by Beame&Whiteside's BWPCTCP v3.0a shim
  2209. --------N-6150-------------------------------
  2210. INT 61 - PC/TCP kernel v2.05+ - "nm_prs_addr" - TRANSLATE NUMERICAL IP ADDRESS
  2211.     AH = 50h
  2212.     DS:DX -> ASCIZ IP address as "dotted quad" (max 127 chars)
  2213. Return: CF clear if successful
  2214.         DX:AX -> IP address
  2215.     CF set on error
  2216.         AX = error code (see INT 61"PC/TCP")
  2217. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2218. --------N-6151-------------------------------
  2219. INT 61 - PC/TCP kernel v2.05+ - "nm_htable" - RESOLVE NAME USING HOST TABLE
  2220.     AH = 51h
  2221.     CX = size of destination buffer
  2222.     DS:DX -> ASCIZ host name (max 127 chars)
  2223.     ES:DI -> destination buffer or 0000h:0000h
  2224. Return: CF clear if successful
  2225.         DX:AX -> IP address of host
  2226.         destination buffer filled with canonical host name
  2227.     CF set on error
  2228.         AX = error code (see INT 61"PC/TCP")
  2229. Note:    this function calls DOS, and can fail if the DOS call fails
  2230. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2231. --------N-6152-------------------------------
  2232. INT 61 - PC/TCP kernel v2.05+ - "nm_domain" - RESOLVE NAME USING DNS
  2233.     AH = 52h
  2234.     CX = size of destination buffer
  2235.     DS:DX -> ASCIZ host name (max 127 chars)
  2236.     ES:DI -> destination buffer or 0000h:0000h
  2237. Return: CF clear if successful
  2238.         DX:AX -> IP address of host
  2239.         destination buffer filled with canonical host name
  2240.     CF set on error
  2241.         AX = error code (see INT 61"PC/TCP")
  2242. Note:    this function will poll all configured domain name servers if necessary
  2243. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2244. --------N-6153-------------------------------
  2245. INT 61 - PC/TCP kernel v2.05- - "nm_ien116" - RESOLVE HOST NAME USING IEN116
  2246.     AH = 53h
  2247.     DS:DX -> ASCIZ name to be resolved (max 127 chars)
  2248. Return: CF clear if successful
  2249.         DX:AX -> IP address of host
  2250.     CF set on error
  2251.         AX = error code (see INT 61"PC/TCP")
  2252. Note:    this function is not supported by v2.10+
  2253. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=54h
  2254. --------N-6154-------------------------------
  2255. INT 61 - PC/TCP kernel v2.05+ - "nm_res_name" - RESOLVE HOST NAME
  2256.     AH = 54h
  2257.     CX = size of destination buffer
  2258.     DS:DX -> ASCIZ host name (max 127 chars)
  2259.     ES:DI -> destination buffer or 0000h:0000h
  2260. Return: CF clear if successful
  2261.         DX:AX -> IP address of host
  2262.         destination buffer filled with canonical host name
  2263.     CF set on error
  2264.         AX = error code (see INT 61"PC/TCP")
  2265. Note:    this function uses all configured methods in turn to resolve the
  2266.       name (numerical, then host table, then DNS, then IEN116)
  2267. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  2268.       greater than 54h in AH may crash the system.    Other kernels may have
  2269.       this bug as well; it has been fixed in the v2.2 SLIPDRV kernel.
  2270. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=50h,INT 61/AH=51h
  2271. SeeAlso: INT 61/AH=52h,INT 61/AH=53h
  2272. --------*-62---------------------------------
  2273. INT 62 - reserved for user interrupt
  2274. --------d-62---------------------------------
  2275. INT 62 - Adaptec and OMTI controllers - DRIVE 0 DATA
  2276. Notes:    this vector stores the third four bytes of the parameter table for
  2277.       hard disk 0
  2278. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 63"Adaptec"
  2279. --------b-62---------------------------------
  2280. INT 62 - HP 95LX - USED BY CALCULATOR
  2281. SeeAlso: INT 60"HP 95LX"
  2282. ----------62---------------------------------
  2283. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - ???
  2284.     AH = function (00h to 07h)
  2285.     CX = FFFEh
  2286.     DX = FFFFh
  2287.     ???
  2288. Return: ???
  2289. Note:    the installation check consists of testing for the string "DBLIBRARY"
  2290.       2 bytes past the interrupt handler
  2291. SeeAlso: AH=08h"SQL"
  2292. Index:    installation check;MS SQL Server|installation check;Sybase DBLIBRARY
  2293. --------N-62---------------------------------
  2294. INT 62 - BW-TCP - HARDWARE DRIVER (ETHDEV.SYS) - API
  2295.     AH = function
  2296.         00h get physical hardware address
  2297.         DS:DX -> 6-byte buffer for address
  2298.         Return: AX = length of hardware address???
  2299.         01h NOP for ETHDEV.ODI
  2300.         02h initialize
  2301.         03h get real IP address
  2302.         DS:SI -> DWORD buffer for IP address
  2303.         04h set ???
  2304.         BX = ???
  2305.         ES:SI -> FAR routine for ???
  2306.         05h ???
  2307.         06h ???
  2308.         07h ???
  2309.         DS:SI -> ???
  2310.         08h ???
  2311.         CX = ???
  2312.         ES:SI -> func08 buffer
  2313.         09h hook timer interrupt
  2314.         Return: AX = handler ID if successful
  2315.         0Ah unhook timer interrupt
  2316.         DX = handler ID
  2317.         0Bh add ???
  2318.         AL = ???
  2319.         DX = ???
  2320.         BP = ???
  2321.         ES:SI -> ???
  2322.         0Ch remove ???
  2323.         DX = ???
  2324.         BP = ???
  2325.         0Dh NOP for ETHDEV.ODI
  2326.         0Eh begin critical section
  2327.         0Fh end critical section
  2328.         10h query critical section
  2329.         Return: CF clear if no critical section active
  2330.             CF set if in critical section
  2331.         11h set ???
  2332.         ES:SI -> ???
  2333.         Return: CF clear
  2334.         12h get ?
  2335.         Return: AX = ??? (memory variable incremented after reading)
  2336.         13h ???
  2337.         CX = ???
  2338.         Return: AL = 00h if CF clear
  2339.         14h ???
  2340.         ES:SI -> ???
  2341.         Return: AL = 00h if CF clear
  2342.         15h get ??? (call after reading ETHDEV27 device)
  2343.         Return: AX = ??? (destroyed???)
  2344.         16h ???
  2345.         17h ???
  2346.         DX = segment of ???
  2347.         Return: Cf clear
  2348.         18h allocate and map EMS for driver
  2349.         Note: calls function 17h after EMS allocated and mapped
  2350.         FEh map EMS
  2351.         00h map in driver's memory
  2352.         01h map out driver's memory
  2353. Return: CF clear if successful
  2354.     CF set on error
  2355.         AL = error code
  2356. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  2357.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  2358.       consecutive interrupt (64h by default) if it is loaded
  2359. SeeAlso: AH=FEh,INT 21/AH=3Fh"BW-TCP",INT 63"BW-TCP",INT 64"BW-NFS"
  2360.  
  2361. Format of func08 buffer:
  2362. Offset    Size    Description
  2363.  00h  6 BYTEs    hardware address???
  2364.  06h  6 BYTEs    ???
  2365.  0Ch    WORD    ???
  2366.  0Eh    WORD    ???
  2367. --------V-620000-----------------------------
  2368. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCATE" - CREATE VIRTUAL VIDEO PAGE
  2369.     AX = 0000h
  2370.     BX = page number (0000h-003Fh)
  2371. Return: AX = status (0000h,0001h,0007h,0008h) (see below)
  2372. Program: FGDRIVER is the external video driver for the shareware
  2373.       Fastgraph/Light by Ted Gruber Software
  2374. Notes:    For FGDRIVER v1.10, this function was "FG_GETMODE" (see AX=003Fh);
  2375.       "FG_ALLOCATE" was AX=0042h
  2376.     The amount of memory required by the virtual video page depends on the
  2377.       current video mode
  2378.     The installation check consists of testing for the signature "FG" ten
  2379.       bytes beyond the start of the interrupt handler
  2380. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=002Eh
  2381. Index:    installation check;Fastgraph/Light
  2382.  
  2383. Values for status:
  2384.  0000h    successful
  2385.  0001h    specified page is a physical or logical page
  2386.  0007h    virtual page created/released, but memory control blocks corrupted
  2387.  0008h    not enough memory
  2388.  0009h    attempt to free a page which was never created
  2389. --------V-620001-----------------------------
  2390. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCCMS" - CREATE LOGICAL VIDEO PAGE (CONVMEM)
  2391.     AX = 0001h
  2392.     BX = page number (0001h-003Fh)
  2393. Return: AX = status (0000h,FFFCh,FFFDh,FFFEh) (see below)
  2394. Notes:    For FGDRIVER v1.10, this function was "FG_SETMODE" (see AX=0093h);
  2395.       "FG_ALLOCCMS" was AX=009Dh
  2396.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2397.       (see AX=0012h)
  2398. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0012h,AX=002Eh
  2399.  
  2400. Values for status:
  2401.  0000h    successful
  2402.  FFFCh    insufficient memory
  2403.  FFFDh    page already created, or exists as physical or virtual page
  2404.  FFFEh    invalid page number
  2405.  FFFFh    memory manager not initialized
  2406. --------V-620002-----------------------------
  2407. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCEMS" - CREATE LOGICAL VIDEO PAGE (EMS)
  2408.     AX = 0002h
  2409.     BX = page number (0001h-003Fh)
  2410. Return: AX = status (see AX=0001h)
  2411. Notes:    For FGDRIVER v1.10, this function was "FG_TESTMODE" (see AX=00A7h);
  2412.       "FG_ALLOCEMS" was AX=009Eh
  2413.     You must first call "FG_INITEMS" (see AX=004Ch) before using this
  2414.       function
  2415.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2416.       (see AX=0012h)
  2417. SeeAlso: AX=0000h,AX=0001h,AX=0003h,AX=0012h,AX=002Eh,AX=004Ch
  2418. --------V-620003-----------------------------
  2419. INT 62 u - FGDRIVER v3.03 - "FG_ALLOCXMS" - CREATE LOGICAL VIDEO PAGE (XMS)
  2420.     AX = 0003h
  2421.     BX = page number (0001h-003Fh)
  2422. Return: AX = status (see AX=0001h)
  2423. Notes:    For FGDRIVER v1.10, this function was "FG_BESTMODE" (see AX=0005h),
  2424.       and "FG_ALLOCXMS" was AX=009Fh
  2425.     You must first call "FG_INITXMS" (see AX=004Eh) before using this
  2426.       function
  2427.     The only operation which is allowed on logical pages is "FG_COPYPAGE"
  2428.       (see AX=0012h)
  2429. SeeAlso: AX=0000h,AX=0001h,AX=0002h,AX=0012h,AX=002Eh,AX=004Eh
  2430. --------V-620004-----------------------------
  2431. INT 62 u - FGDRIVER v1.10,3.03 - "FG_AUTOMODE" - GET VIDEO MODE W/MOST FEATURES
  2432.     AX = 0004h
  2433. Return: AX = proposed video mode number (see AX=0093h)
  2434. Program: FGDRIVER is the external video driver for the shareware
  2435.       Fastgraph/Light by Ted Gruber Software
  2436. SeeAlso: AX=0005h,AX=003Fh,AX=0093h,AX=00A1h,AX=00A7h
  2437. --------V-620005-----------------------------
  2438. INT 62 u - FGDRIVER v3.03 - "FG_BESTMODE" - GET BEST VIDEO MODE GIVEN RESOLUTN
  2439.     AX = 0005h
  2440.     BX = horizontal resolution
  2441.     CX = vertical resolution
  2442.     DX = number of video pages required (both physical and virtual)
  2443. Return: AX = proposed video mode number or FFFFh if no matching video mode
  2444. Notes:    For FGDRIVER v1.10, this function was "FG_EGACHECK" (see AX=0023h);
  2445.        "FG_BESTMODE" was AX=0003h
  2446.     You must first call "FG_SVGAINIT" (see AX=00A1h) to get SVGA video
  2447.       modes
  2448. SeeAlso: AX=0004h,AX=003Fh,AX=0093h,AX=00A1h,AX=00A7h
  2449. --------V-620006-----------------------------
  2450. INT 62 u - FGDRIVER v3.03 - "FG_BOX" - DRAW UNFILLED RECTANGLE
  2451.     AX = 0006h
  2452.     BX = left column
  2453.     CX = right column
  2454.     DX = top row
  2455.     SI = bottom row
  2456. Notes:    For FGDRIVER v1.10, this function was "FG_RESET" (see AX=0081h);
  2457.       "FG_BOX" was AX=00A2h
  2458.     The rectangle is drawn in screen space, respecting the clipping region,
  2459.       with edges of the width specified with "FG_BOXDEPTH" (see AX=0007h)
  2460.       (default = 1 is set by "FG_SETMODE")
  2461.     This function has no effect in text modes
  2462. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,AX=0014h,AX=001Bh,AX=0024h,AX=0076h
  2463. --------V-620007-----------------------------
  2464. INT 62 u - FGDRIVER v3.03 - "FG_BOXDEPTH" - SET RECTANGLE BORDER WIDTH
  2465.     AX = 0007h
  2466.     BX = width of left and right edges in pixels (> 0)
  2467.     CX = width of top and bottom edges in pixels (> 0)
  2468. Note:    For FGDRIVER v1.10, this function was "FG_CURSOR" (see AX=0013h);
  2469.       "FG_BOXDEPTH" was AX=00A3h
  2470. SeeAlso: AX=0006h,AX=0008h
  2471. --------V-620008-----------------------------
  2472. INT 62 u - FGDRIVER v3.03 - "FG_BOXX" - XOR HOLLOW RECTANGLE
  2473.     AX = 0008h
  2474.     BX = left column
  2475.     CX = right column
  2476.     DX = top row
  2477.     SI = bottom row
  2478. Notes:    For FGDRIVER v1.10, this function was unused and "FG_BOXX" did not
  2479.       exist yet
  2480.     The rectangle is XORed into screen space, respecting the clipping
  2481.       region, with edges of the width specified with "FG_BOXDEPTH"
  2482.       (see AX=0007h) (default = 1 is set by "FG_SETMODE")
  2483.     This function has no effect in text modes
  2484. SeeAlso: AX=0006h,AX=0007h,AX=001Fh,AX=0020h,AX=0077h
  2485. --------V-620009-----------------------------
  2486. INT 62 u - FGDRIVER v3.03 - "FG_BUTTON" - GET JOYSTICK BUTTON STATE
  2487.     AX = 0009h
  2488.     BX = joystick number (0001h or 0002h)
  2489. Return: AX = button states
  2490.         bit 0: top button pressed
  2491.         bit 1: bottom button pressed
  2492. Note:    For FGDRIVER v1.10, this function was unused; "FG_BUTTON" was AX=0078h
  2493. SeeAlso: AX=0044h,AX=0046h,AX=004Dh,AX=0050h,AX=0061h
  2494. --------V-62000A-----------------------------
  2495. INT 62 u - FGDRIVER v3.03 - "FG_CAPSLOCK" - GET STATE OF CAPSLOCK KEY
  2496.     AX = 000Ah
  2497. Return: AX = CapsLock state (0000h off, 0001h on)
  2498. Note:    For FGDRIVER v1.10, this function was "FG_GETMAXX" (see AX=003Dh);
  2499.       "FG_CAPSLOCK" was AX=0070h
  2500. SeeAlso: AX=006Ch,AX=0088h,AX=008Bh,AX=0094h
  2501. --------V-62000B-----------------------------
  2502. INT 62 u - FGDRIVER v3.03 - "FG_CHGATTR" - APPLY CURRENT TEXT ATTRIB TO CHARS
  2503.     AX = 000Bh
  2504.     BX = number of characters to recolor
  2505. Notes:    For FGDRIVER v1.10, this function was "FG_GETMAXY" (see AX=003Eh);
  2506.       "FG_CHGATTR" was AX=0035h
  2507.     This call is ignored in graphics modes
  2508.     Starting at the current text cursor position, the specified number of
  2509.       characters have their attributes to the current text attribute
  2510. SeeAlso: AX=000Ch,AX=0030h,AX=008Ah
  2511. --------V-62000C-----------------------------
  2512. INT 62 u - FGDRIVER v3.03 - "FG_CHGTEXT" - DISPLAY STRING AT CURSOR POSITION
  2513.     AX = 000Ch
  2514.     CX = length of string
  2515.     ES:BX -> string to be displayed
  2516. Return: text cursor updated
  2517. Notes:    For FGDRIVER v1.10, this function was "FG_XALPHA" (see AX=00B0h);
  2518.       "FG_CHGTEXT" was AX=0036h
  2519.     This call is ignored in graphics modes
  2520. SeeAlso: AX=000Bh,AX=007Ch
  2521. --------V-62000D-----------------------------
  2522. INT 62 u - FGDRIVER v3.03 - "FG_CIRCLE" - DRAW UNFILLED CIRCLE
  2523.     AX = 000Dh
  2524.     BX = radius in horizontal screen space units (> 0)
  2525. Notes:    For FGDRIVER v1.10, this function was "FG_YALPHA" (see AX=00B2h);
  2526.       "FG_CIRCLE" was AX=0030h
  2527.     The circle is drawn in screen space, centered at the current graphics
  2528.       cursor position
  2529.     This call is ignored in text modes
  2530. SeeAlso: AX=0006h,AX=0008h,AX=000Eh,AX=0024h,AX=0079h
  2531. --------V-62000E-----------------------------
  2532. INT 62 u - FGDRIVER v3.03 - "FG_CIRCLEF" - DRAW FILLED CIRCLE
  2533.     AX = 000Eh
  2534.     BX = radius in horizontal screen space units (> 0)
  2535. Notes:    For FGDRIVER v1.10, this function was "FG_XCONVERT" (see AX=00B1h);
  2536.       "FG_CIRCLEF" did not exist yet
  2537. SeeAlso: AX=0008h,AX=000Dh,AX=0025h,AX=0078h
  2538. --------V-62000F-----------------------------
  2539. INT 62 u - FGDRIVER v3.03 - "FG_CLIPMASK" - DISPLAY CLIPPED IMAGE (MASKING MAP)
  2540.     AX = 000Fh
  2541.     ES:BX -> array containing image stored as a masking map (see AX=001Dh)
  2542.     CX = number of pixel runs in masking map
  2543.     DX = width of masking map in pixels
  2544. Notes:    For FGDRIVER v1.10, this function was "FG_YCONVERT" (see AX=00B3h);
  2545.        "FG_CLIPMASK" was AX=0052h
  2546.     This call is ignored in text modes and in native EGA and VGA graphics
  2547.       modes
  2548.     The image is drawn with its lower left corner at the current graphics
  2549.       cursor position
  2550. SeeAlso: AX=0010h,AX=001Dh,AX=002Ah,AX=0086h,AX=008Ch,AX=00A5h
  2551. --------V-620010-----------------------------
  2552. INT 62 u - FGDRIVER v3.03 - "FG_CLPIMAGE" - DISPLAY CLIPPED IMAGE (BITMAP)
  2553.     AX = 0010h
  2554.     ES:BX -> mode-specific bitmap
  2555.     CX = width of bit map in bytes
  2556.     DX = height of bit map in pixel rows
  2557. Notes:    For FGDRIVER v1.10, this function was "FG_GETLINES" (see AX=003Bh);
  2558.       "FG_CLPIMAGE" was AX=004Ah
  2559.     This call is ignored in text modes
  2560.     The image is drawn with its lower left corner at the current graphics
  2561.       cursor position
  2562.     The current clipping region is used, extended to a byte boundary
  2563. SeeAlso: AX=000Fh,AX=0022h,AX=002Ch,AX=0038h,AX=0085h,AX=008Ch,AX=009Ah
  2564. --------V-620011-----------------------------
  2565. INT 62 u - FGDRIVER v3.03 - "FG_CLPRECT" - DRAW FILLED RECTANGLE IN SCREEN SPCE
  2566.     AX = 0011h
  2567.     BX = screen space column of left edge
  2568.     CX = screen space column of right edge
  2569.     DX = screen space row of top edge
  2570.     SI = screen space row of bottom edge
  2571. Notes:    For FGDRIVER v1.10, this function was "FG_SETLINES" (see AX=0092h);
  2572.       "FG_CLPRECT" was AX=002Bh
  2573.     This call is ignored in text modes
  2574. SeeAlso: AX=0006h,AX=000Fh,AX=0010h,AX=0021h,AX=0080h,AX=008Ch
  2575. --------V-620012-----------------------------
  2576. INT 62 u - FGDRIVER v3.03 - "FG_COPYPAGE" - TRANSFER VIDEO PAGE CONTENTS
  2577.     AX = 0012h
  2578.     BX = source page number (0000h-003Fh)
  2579.     CX = destination page number (0000h-003Fh)
  2580. Notes:    For FGDRIVER v1.10, this function was unused;"FG_COPYPAGE" was AX=005Fh
  2581.     If both source and destination pages are logical pages, they must both
  2582.       be located in the same type (conventional, EMS, XMS) of memory
  2583. SeeAlso: AX=0083h,AX=0087h,AX=00A6h,AX=00A9h
  2584. --------V-620013-----------------------------
  2585. INT 62 u - FGDRIVER v3.03 - "FG_CURSOR" - SPECIFY WHETHER TEXT CURSR IS VISIBLE
  2586.     AX = 0013h
  2587.     BX = new state (0000h invisible, 0001h visible)
  2588. Notes:    For FGDRIVER v1.10, this function was unused; "FG_CURSOR" was AX=0007h
  2589.     This call is ignored in text modes
  2590. SeeAlso: AX=000Ch,AX=0045h,AX=0047h,AX=0055h,AX=005Fh,AX=0063h,AX=0068h
  2591. SeeAlso: AX=00AFh
  2592. --------V-620014-----------------------------
  2593. INT 62 u - FGDRIVER v3.03 - "FG_DASH" - DRAW DASHED LINE TO ABSOLUTE POSITION
  2594.     AX = 0014h
  2595.     BX = endpoint column
  2596.     CX = endpoint row
  2597.     DX = dash pattern (set bits cause drawn pixels)
  2598. Notes:    For FGDRIVER v1.10, this function was "FG_DEFCOLOR" (see AX=0016h);
  2599.       "FG_DASH" was AX=0027h
  2600.     This call is ignored in text modes
  2601.     The starting point is the current graphics cursor position; the cursor
  2602.       position is updated
  2603. SeeAlso: AX=0015h,AX=001Bh,AX=0076h
  2604. --------V-620015-----------------------------
  2605. INT 62 u - FGDRIVER v3.03 - "FG_DASHREL" - DRAW DASHED LINE TO RELATVE POSITION
  2606.     AX = 0015h
  2607.     BX = endpoint column offset
  2608.     CX = endpoint row offset
  2609.     DX = dash pattern (set bits cause drawn pixels)
  2610. Notes:    For FGDRIVER v1.10, this function was "FG_GETCOLOR" (see AX=0034h);
  2611.       "FG_DASHREL" was AX=0028h
  2612.     This call is ignored in text modes
  2613.     The starting point is the current graphics cursor position; the cursor
  2614.       position is updated
  2615. SeeAlso: AX=0014h,AX=001Ch,AX=0076h
  2616. --------V-620016-----------------------------
  2617. INT 62 u - FGDRIVER v3.03 - "FG_DEFCOLOR" - ASSIGN COLOR VALUE TO COLOR INDEX
  2618.     AX = 0016h
  2619.     BX = color index (0000h-00FFh)
  2620.     CX = new color value (0 to maximum color value for current video mode)
  2621. Notes:    For FGDRIVER v1.10, this function was "FG_GETINDEX" (see AX=0039h);
  2622.       "FG_DEFCOLOR" was AX=0014h
  2623.     This call is ignored in text modes and 256-color graphics modes
  2624. SeeAlso: AX=0034h,AX=0039h,AX=008Dh
  2625. --------V-620017-----------------------------
  2626. INT 62 u - FGDRIVER v3.03 - "FG_DEFPAGES" - DEF SRC/DEST PAGES FOR BLOCK XFERS
  2627.     AX = 0017h
  2628.     BX = source page
  2629.     CX = destination page
  2630. Desc:    specify the source and destination SVGA banks for block transfers on
  2631.       extended video pages
  2632. Notes:    For FGDRIVER v1.10, this function was "FG_PALETTE" (see AX=006Fh);
  2633.       "FG_DEFPAGES" did not exist yet
  2634.     This function is ignored if the video controller does not support
  2635.       extended pages or the current video mode does not allow them
  2636. SeeAlso: AX=0012h,AX=00A9h
  2637. --------V-620018-----------------------------
  2638. INT 62 u - FGDRIVER v3.03 - "FG_DISPFILE" - DISPLAY STORED IMAGE
  2639.     AX = 0018h
  2640.     ES:BX -> ASCIZ filename
  2641.     CX = image width in pixels (> 0)
  2642.     DX = image format
  2643.         0000h Fastgraph standard pixel run format
  2644.         0001h packed pixel run format
  2645. Notes:    For FGDRIVER v1.10, this function was "FG_PALETTES" (see AX=0070h);
  2646.       "FG_DISPFILE" was AX=004Fh
  2647.     This call is ignored in text modes
  2648.     The image is displayed with its lower left corner at the current
  2649.       graphics cursor position
  2650. SeeAlso: AX=0019h,AX=001Ah,AX=009Ah,AX=009Bh,AX=009Ch
  2651. --------V-620019-----------------------------
  2652. INT 62 u - FGDRIVER v3.03 - "FG_DISPLAY" - DISPLAY IMAGE (STD PIXEL RUN FORMAT)
  2653.     AX = 0019h
  2654.     ES:BX -> pixel run map (pairs of bytes: color index, count)
  2655.     CX = number of pixel runs to display
  2656.     DX = width of image in pixels (> 0)
  2657. Notes:    For FGDRIVER v1.10, this function was "FG_SETATTR" (see AX=008Ah);
  2658.       "FG_DISPLAY" was AX=004Dh
  2659.     This call is ignored in text modes
  2660.     The image is displayed with its lower left corner at the current
  2661.       graphics cursor position
  2662. SeeAlso: AX=0018h,AX=001Ah,AX=009Ah,AX=009Bh,AX=009Ch
  2663. --------V-62001A-----------------------------
  2664. INT 62 u - FGDRIVER v3.03 - "FG_DISPLAYP" - DISPLAY IMAGE (PACKED PIXEL RUNS)
  2665.     AX = 001Ah
  2666.     ES:BX -> pixel run map (trios of bytes: colors, count1, count2; colors
  2667.         contains the color for the first run in its high nybble and the
  2668.         color for the second run in its low nybble)
  2669.     CX = number of pixel runs to display
  2670.     DX = width of image in pixels (> 0)
  2671. Notes:    For FGDRIVER v1.10, this function was "FG_SETCOLOR" (see AX=008Dh);
  2672.       "FG_DISPLAYP" was AX=004Eh
  2673.     This call is ignored in text modes
  2674.     The image is displayed with its lower left corner at the current
  2675.       graphics cursor position
  2676. SeeAlso: AX=0018h,AX=0019h,AX=009Ah,AX=009Bh,AX=009Ch
  2677. --------V-62001B-----------------------------
  2678. INT 62 u - FGDRIVER v3.03 - "FG_DRAW" - DRAW SOLID LINE TO ABSOLUTE POSITION
  2679.     AX = 001Bh
  2680.     BX = endpoint column
  2681.     CX = endpoint row
  2682. Notes:    For FGDRIVER v1.10, this function was "FG_SETRGB" (see AX=0096h);
  2683.       "FG_DRAW" was AX=0025h
  2684.     This call is ignored in text modes
  2685.     The starting point is the current graphics cursor position; the cursor
  2686.       position is updated
  2687. SeeAlso: AX=0014h,AX=001Eh,AX=001Fh,AX=0024h,AX=0076h,AX=0077h
  2688. --------V-62001C-----------------------------
  2689. INT 62 u - FGDRIVER v3.03 - "FG_DRAWMAP" - DISPLAY MODE-INDEPENDENT BIT MAP
  2690.     AX = 001Ch
  2691.     ES:BX -> bitmap (each set bit is pixel drawn in current color)
  2692.     CX = width of bitmap in bytes
  2693.     DX = height of bitmap in pixel rows
  2694. Note:    For FGDRIVER v1.10, this function was "FG_GETRGB" (see AX=0042h);
  2695.       "FG_DRAWMAP" was AX=0047h
  2696. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=007Eh,AX=0085h
  2697. --------V-62001D-----------------------------
  2698. INT 62 u - FGDRIVER v3.03 - "FG_DRAWMASK" - DISPLAY IMAGE (MASKING MAP)
  2699.     AX = 001Dh
  2700.     ES:BX -> array containing image stored as a masking map (see below)
  2701.     CX = number of pixel runs in masking map
  2702.     DX = width of masking map in pixels
  2703. Notes:    For FGDRIVER v1.10, this function was "FG_MAPRGB" (see AX=005Ah);
  2704.       "FG_DRAWMASK" was AX=0051h
  2705.     This call is ignored in text modes and in native EGA and VGA graphics
  2706.       modes
  2707.     The image is drawn with its lower left corner at the current graphics
  2708.       cursor position
  2709. SeeAlso: AX=000Fh,AX=001Dh,AX=0086h,AX=008Ch
  2710.  
  2711. Format of masking map:
  2712. Offset    Size    Description
  2713.  00h    BYTE    length of first "protect" run (pixels remain unchanged)
  2714.  01h    BYTE    length of first "zero" run (pixels set to background color)
  2715.  02h    BYTE    length of second "protect" run
  2716.  03h    BYTE    length of second "zero" run
  2717.     ...
  2718. --------V-62001E-----------------------------
  2719. INT 62 u - FGDRIVER v3.03 - "FG_DRAWREL" - DRAW SOLID LINE TO RELATIVE POSITION
  2720.     AX = 001Eh
  2721.     BX = endpoint column offset
  2722.     CX = endpoint row offset
  2723. Notes:    For FGDRIVER v1.10, this function was "FG_ERASE" (see AX=0026h);
  2724.       "FG_DRAWREL" was AX=0026h
  2725.     This call is ignored in text modes
  2726.     The starting point is the current graphics cursor position; the cursor
  2727.       position is updated
  2728. SeeAlso: AX=0006h,AX=000Dh,AX=001Bh,AX=001Fh,AX=0024h,AX=0076h
  2729. --------V-62001F-----------------------------
  2730. INT 62 u - FGDRIVER v3.03 - "FG_DRAWRELX" - XOR SOLID LINE TO RELATIVE POSITION
  2731.     AX = 001Fh
  2732.     BX = endpoint column offset
  2733.     CX = endpoint row offset
  2734. Desc:    draw a solid line, XORing each pixel onto the screen
  2735. Notes:    For FGDRIVER v1.10, this function was "FG_POINT" (see AX=0076h);
  2736.       "FG_DRAWRELX" did not exist yet
  2737.     This call is ignored in text modes
  2738.     The starting point is the current graphics cursor position; the cursor
  2739.       position is updated
  2740. SeeAlso: AX=0006h,AX=000Dh,AX=001Bh,AX=001Eh,AX=0024h,AX=0077h
  2741. --------V-620020-----------------------------
  2742. INT 62 u - FGDRIVER v3.03 - "FG_DRAWX" - XOR SOLID LINE TO ABSOLUTE POSITION
  2743.     AX = 0020h
  2744.     BX = endpoint column
  2745.     CX = endpoint row
  2746. Desc:    draw a solid line, XORing each pixel onto the screen
  2747. Notes:    For FGDRIVER v1.10, this function was "FG_GETPIXEL" (see AX=0041h);
  2748.       "FG_DRAWX" did not exist yet
  2749.     This call is ignored in text modes
  2750.     The starting point is the current graphics cursor position; the cursor
  2751.       position is updated
  2752. SeeAlso: AX=001Bh,AX=001Fh,AX=0076h
  2753. --------V-620021-----------------------------
  2754. INT 62 u - FGDRIVER v3.03 - "FG_DRECT" - DRAW DITHERED RECTANGLE IN SCRN SPACE
  2755.     AX = 0021h
  2756.     BX = screen space column of left edge
  2757.     CX = screen space column of right edge
  2758.     DX = screen space row of top edge
  2759.     SI = screen space row of bottom edge
  2760.     ES:DI -> dithering matrix (video-mode dependent)
  2761. Notes:    For FGDRIVER v1.10, this function was "FG_GETXPOS" (see AX=0045h);
  2762.       "FG_DRECT" was AX=002Ch
  2763.     This call is ignored in text modes
  2764. SeeAlso: AX=0006h,AX=0008h,AX=0011h,AX=0031h,AX=0072h,AX=0080h
  2765. --------V-620022-----------------------------
  2766. INT 62 u - FGDRIVER v3.03 - "FG_DRWIMAGE" - DISPLAY BITMAPPED IMAGE
  2767.     AX = 0022h
  2768.     ES:BX -> video mode-specific bitmap
  2769.     CX = width of bitmap in bytes
  2770.     DX = height of bitmap in pixel rows
  2771. Notes:    For FGDRIVER v1.10, this function was "FG_GETYPOS" (see AX=0047h);
  2772.       "FG_DRWIMAGE" was AX=0049h
  2773.     The image will be drawn with its lower left corner at the current
  2774.       cursor position (either text or graphics)
  2775. SeeAlso: AX=0010h,AX=002Ch,AX=0038h,AX=007Eh,AX=0085h
  2776. --------V-620023-----------------------------
  2777. INT 62 u - FGDRIVER v3.03 - "FG_EGACHECK" - GET INFO ABOUT ACTIVE EGA DISPLAY
  2778.     AX = 0023h
  2779. Return: AX = number of 64K banks of video memory, or 0000h if no EGA or EGA
  2780.           without an Enhanced Color Display
  2781. Note:    For FGDRIVER v1.10, this function was "FG_MOVE" (see AX=0068h);
  2782.       "FG_EGACHECK" was AX=0005h
  2783. SeeAlso: AX=00A2h
  2784. --------V-620024-----------------------------
  2785. INT 62 u - FGDRIVER v3.03 - "FG_ELLIPSE" - DRAW UNFILLED ELLIPSE IN SCRN SPACE
  2786.     AX = 0024h
  2787.     BX = horizontal semi-axis length in screen space units
  2788.     CX = vertical semi-axis length in screen space units
  2789. Notes:    For FGDRIVER v1.10, this function was "FG_MOVEREL" (see AX=0069h);
  2790.       "FG_ELLIPSE" was AX=002Dh
  2791.     This call is ignored in text modes
  2792.     The ellipse is centered at the current graphics cursor position
  2793. SeeAlso: AX=0006h,AX=000Dh,AX=0025h,AX=0076h,AX=0079h
  2794. --------V-620025-----------------------------
  2795. INT 62 u - FGDRIVER v3.03 - "FG_ELLIPSEF" - DRAW FILLED ELLIPSE IN SCREEN SPACE
  2796.     AX = 0025h
  2797.     BX = horizontal semi-axis length in screen space units
  2798.     CX = vertical semi-axis length in screen space units
  2799. Notes:    For FGDRIVER v1.10, this function was "FG_DRAW" (see AX=001Bh);
  2800.       "FG_ELLIPSEF" did not exist yet
  2801.     This call is ignored in text modes
  2802.     The ellipse is centered at the current graphics cursor position
  2803. SeeAlso: AX=0006h,AX=000Eh,AX=0024h,AX=0076h,AX=0078h
  2804. --------V-620026-----------------------------
  2805. INT 62 u - FGDRIVER v3.03 - "FG_ERASE" - CLEAR THE ACTIVE VIDEO PAGE
  2806.     AX = 0026h
  2807. Note:    For FGDRIVER v1.10, this function was "FG_DRAWREL" (see AX=001Eh);
  2808.       "FG_ERASE" was AX=001Eh
  2809.     This function sets each pixel to 0 in graphics modes, each character
  2810.       cell to a blank with a gray foreground attribute in text modes
  2811. SeeAlso: AX=0027h,AX=0029h,AX=002Bh
  2812. --------V-620027-----------------------------
  2813. INT 62 u - FGDRIVER v3.03 - "FG_FADEIN" - FADE IN HIDDEN PAGE
  2814.     AX = 0027h
  2815.     BX = delay (0000h = fastest possible fade-in)
  2816. Notes:    For FGDRIVER v1.10, this function was "FG_DASH" (see AX=0014h);
  2817.       "FG_FADEIN" was AX=0064h
  2818.     The current hidden page is copied to the current visible page in small
  2819.       random sections to produce a fade-in effect
  2820.     This call is ignored in text modes
  2821. SeeAlso: AX=0026h,AX=0028h,AX=0029h
  2822. --------V-620028-----------------------------
  2823. INT 62 u - FGDRIVER v3.03 - "FG_FADEOUT" - FADE OUT TO CURRENT COLOR
  2824.     AX = 0028h
  2825.     BX = delay (0000h = fastest possible fade-out)
  2826. Notes:    For FGDRIVER v1.10, this function was "FG_DASHREL" (see AX=0015h);
  2827.       "FG_FADEOUT" was AX=0065h
  2828.     The current visible page is filled with pixels of the current color in
  2829.       small random sections to give a fade-out effect
  2830.     This call is ignored in text modes
  2831. SeeAlso: AX=0026h,AX=0027h,AX=0029h
  2832. --------V-620029-----------------------------
  2833. INT 62 u - FGDRIVER v3.03 - "FG_FILLPAGE" - FILL THE ACTIVE VIDEO PAGE
  2834.     AX = 0029h
  2835. Desc:    fill the active video page with pixels of the current color (graphics
  2836.       modes) or the block character DBh with the current character
  2837.       attributes (text modes)
  2838. Note:    For FGDRIVER v1.10, this function was "FG_SETCLIP" (see AX=008Ch);
  2839.       "FG_FILLPAGE" did not exist yet
  2840. SeeAlso: AX=0026h,AX=0027h,AX=0028h
  2841. --------V-62002A-----------------------------
  2842. INT 62 u - FGDRIVER v3.03 - "FG_FLIPMASK" - DISPLAY INV CLIPPED IMAGE (MASKMAP)
  2843.     AX = 002Ah
  2844.     ES:BX -> array containing image stored as a masking map (see AX=0051h)
  2845.     CX = number of pixel runs in masking map
  2846.     DX = width of masking map in pixels
  2847. Notes:    For FGDRIVER v1.10, this function was "FG_RECT" (see AX=0080h);
  2848.       "FG_FLIPMASK" was AX=0054h
  2849.     This call is ignored in text modes and in native EGA and VGA graphics
  2850.       modes
  2851.     The image is drawn with its lower left corner at the current graphics
  2852.       cursor position
  2853. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ch,AX=0086h,AX=008Ch,AX=00A5h
  2854. --------V-62002B-----------------------------
  2855. INT 62 u - FGDRIVER v3.03 - "FG_FLOOD" - FLOOD FILL ARBITRARY CLOSED REGION
  2856.     AX = 002Bh
  2857.     BX = starting column
  2858.     CX = starting row
  2859. Desc:    fill the bounded region around the specified point (respecting clipping
  2860.       region) with the currrent color
  2861. Notes:    For FGDRIVER v1.10, this function was "FG_CLPRECT" (see AX=0011h);
  2862.       "FG_FLOOD" did not exist yet
  2863.     This function is ignored in text modes
  2864. SeeAlso: AX=0026h,AX=006Eh
  2865. --------V-62002C-----------------------------
  2866. INT 62 u - FGDRIVER v3.03 - "FG_FLPIMAGE" - DISPLAY INV CLIPPED IMAGE (BITMAP)
  2867.     AX = 002Ch
  2868.     ES:BX -> mode-specific bitmap
  2869.     CX = width of bit map in bytes
  2870.     DX = height of bit map in pixel rows
  2871. Notes:    For FGDRIVER v1.10, this function was "FG_DRECT" (see AX=0021h);
  2872.        "FG_FLPIMAGE" was AX=004Ch
  2873.     This call is ignored in text modes
  2874.     The image is drawn with its lower left corner at the current graphics
  2875.       cursor position
  2876.     The current clipping region is used, extended to a byte boundary
  2877. SeeAlso: AX=0010h,AX=0022h,AX=002Ah,AX=0038h,AX=0085h,AX=008Ch,AX=009Ah
  2878. --------V-62002D-----------------------------
  2879. INT 62 u - FGDRIVER v3.03 - "FG_FONTSIZE" - SPECIFY FONT SIZE FOR TEXT OUTPUT
  2880.     AX = 002Dh
  2881.     BX = desired character height in scan lines (8, 14, 16)
  2882. Notes:    For FGDRIVER v1.10, this function was "FG_ELLIPSE" (see AX=0024h);
  2883.        "FG_FONTSIZE" did not exist yet
  2884.     This call is ignored if the current mode is not a VGA or SVGA graphics
  2885.       mode, or the specified character height is not 8, 14, or 16
  2886. SeeAlso: AX=007Ch
  2887. --------V-62002E-----------------------------
  2888. INT 62 u - FGDRIVER v3.03 - "FG_FREEPAGE" - FREE VIRTUAL OR LOGICAL VIDEO PAGE
  2889.     AX = 002Eh
  2890.     BX = page number (0000h-003Fh)
  2891. Return: AX = status (0000h,0001h,0007h,0009h) (see AX=0042h)
  2892. Note:    For FGDRIVER v1.10, this function was "FG_POLYGON" (see AX=0079h);
  2893.        "FG_FREEPAGE" was AX=0043h
  2894. SeeAlso: AX=0000h,AX=0001h,AX=0002h,AX=0003h
  2895. --------V-62002F-----------------------------
  2896. INT 62 u - FGDRIVER v3.03 - "FG_GETADDR" - GET SEGMENT OF ACTIVE VIDEO PAGE
  2897.     AX = 002Fh
  2898. Return: AX = segment of active video page
  2899. Note:    For FGDRIVER v1.10, this function was "FG_PAINT" (see AX=006Eh);
  2900.        "FG_GETADDR" was AX=0044h
  2901. SeeAlso: AX=0036h,AX=008Fh
  2902. --------V-620030-----------------------------
  2903. INT 62 u - FGDRIVER v3.03 - "FG_GETATTR" - GET CHARACTER ATTRIB FOR POSITION
  2904.     AX = 0030h
  2905.     BX = row
  2906.     CX = column
  2907. Return: AX = character attribute at specified location on active video page
  2908. Notes:    For FGDRIVER v1.10, this function was "FG_CIRCLE" (see AX=000Dh);
  2909.       "FG_GETATTR" was AX=0037h
  2910.     This call is ignored in graphics modes
  2911. SeeAlso: AX=000Bh,AX=0032h,AX=0034h,AX=008Ah
  2912. --------V-620031-----------------------------
  2913. INT 62 u - FGDRIVER v3.03 - "FG_GETBLOCK" - GRAB RECTANGLE OF DISPLAY
  2914.     AX = 0031h
  2915.     ES:BX -> buffer for screen contents
  2916.     CX = leftmost column
  2917.     DX = rightmost column
  2918.     SI = top row
  2919.     DI = bottom row
  2920. Notes:    For FGDRIVER v1.10, this function was unused, and "FG_GETBLOCK" did not
  2921.       exist yet
  2922.     In text modes, coordinates are character positions; in graphics modes,
  2923.       they are defined in screen space, and the left and right edges are
  2924.       adjusted to a byte boundary if necessary
  2925.     Use "FG_IMAGESIZ" (see AX=004Bh) to determine the required buffer size
  2926. SeeAlso: AX=0038h,AX=004Bh,AX=007Dh
  2927. --------V-620032-----------------------------
  2928. INT 62 u - FGDRIVER v3.03 - "FG_GETCHAR" - GET CHARACTER FOR SCREEN POSITION
  2929.     AX = 0032h
  2930.     BX = row
  2931.     CX = column
  2932. Return: AX = character at specified location on active video page
  2933. Notes:    For FGDRIVER v1.10, this function was "FG_TEXT" (see AX=00A8h);
  2934.       "FG_GETCHAR" was AX=0038h
  2935.     This call is ignored in graphics modes
  2936. SeeAlso: AX=000Bh,AX=0030h,AX=007Ch,AX=008Ah,AX=00A8h
  2937. --------V-620033-----------------------------
  2938. INT 62 u - FGDRIVER v3.03 - "FG_GETCLOCK" - GET CLOCK TICKS SINCE MIDNIGHT
  2939.     AX = 0033h
  2940. Return: DX:AX = number of clock ticks since midnight
  2941. Note:    For FGDRIVER v1.10, this function was "FG_LOCATE" (see AX=0055h);
  2942.       "FG_GETCLOCK" was AX=0099h
  2943. SeeAlso: INT 1A/AH=00h
  2944. --------V-620034-----------------------------
  2945. INT 62 u - FGDRIVER v3.03 - "FG_GETCOLOR" - GET CURRENT TEXT ATTRIBUTE
  2946.     AX = 0034h
  2947. Return: AX = current text attribute or color index (graphics modes)
  2948. Note:    For FGDRIVER v1.10, this function was "FG_WHERE" (see AX=00AFh);
  2949.       "FG_GETCOLOR" was AX=0015h
  2950. SeeAlso: AX=000Bh,AX=0030h,AX=008Ah
  2951. --------V-620035-----------------------------
  2952. INT 62 u - FGDRIVER v3.03 - "FG_GETDACS" - GET VIDEO DAC CONTENTS
  2953.     AX = 0035h
  2954.     CX = number of DAC registers to return (0001h to 0100h)
  2955.     DX = starting DAC register number (0000h to 00FFh)
  2956.     ES:BX -> buffer for DAC red/green/blue triples
  2957. Notes:    For FGDRIVER v1.10, this function was "FG_CHGATTR" (see AX=000Bh);
  2958.       "FG_GETDACS" was AX=00A4h
  2959.     The register number wraps back to zero after FFh
  2960. SeeAlso: AX=0042h,AX=006Fh,AX=008Eh
  2961. --------V-620036-----------------------------
  2962. INT 62 u - FGDRIVER v3.03 - "FG_GETENTRY" - GET PAGE TYPE AND ADDRESS
  2963.     AX = 0036h
  2964.     ES:BX -> variable pointer record (see below)
  2965.     CX = page number (00h-3Fh)
  2966. Notes:    For FGDRIVER v1.10, this function was "FG_CHGTEXT" (see AX=000Ch);
  2967.       "FG_GETENTRY" did not exist yet
  2968.     Page addresses are segments for pages stored in conventional memory
  2969.       (including physical and virtual pages), and EMS or XMS handles for
  2970.       pages stored in EMS or XMS
  2971. SeeAlso: AX=0000h,AX=008Fh
  2972.  
  2973. Format of variable pointer record:
  2974. Offset    Size    Description
  2975.  00h    WORD    segment of WORD buffer for page address
  2976.  02h    WORD    offset of WORD buffer for page address
  2977.  04h    WORD    segment of WORD buffer for page type
  2978.  06h    WORD    offset of WORD buffer for page type
  2979.  
  2980. Values for page type:
  2981.  0000h    unallocated
  2982.  0001h    physical
  2983.  0002h    virtual
  2984.  0003h    logical page, stored in expanded memory (EMS)
  2985.  0004h    logical page, stored in extended memory (XMS)
  2986.  0005h    logical page, stored in conventional memory
  2987. --------V-620037-----------------------------
  2988. INT 62 u - FGDRIVER v3.03 - "FG_GETHPAGE" - GET CURRENT HIDDEN VIDEO PAGE NUM
  2989.     AX = 0037h
  2990. Return: AX = current hidden video page number (0000h-003Fh)
  2991. Note:    For FGDRIVER v1.10, this function was "FG_GETATTR" (see AX=0030h);
  2992.       "FG_GETHPAGE" was AX=0040h
  2993. SeeAlso: AX=0040h,AX=0043h,AX=0091h
  2994. --------V-620038-----------------------------
  2995. INT 62 u - FGDRIVER v3.03 - "FG_GETIMAGE" - STORE IMAGE AS BITMAP
  2996.     AX = 0038h
  2997.     ES:BX -> buffer for video mode-specific bitmap
  2998.     CX = width of bitmap in bytes
  2999.     DX = height of bitmap in pixel rows
  3000. Note:    For FGDRIVER v1.10, this function was "FG_GETCHAR" (see AX=0032h);
  3001.       "FG_GETIMAGE" was AX=0048h
  3002. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=007Eh,AX=0085h
  3003. --------V-620039-----------------------------
  3004. INT 62 u - FGDRIVER v3.03 - "FG_GETINDEX" - GET COLOR VALUE FOR COLOR INDEX
  3005.     AX = 0039h
  3006.     BX = color index (0000h to 00FFh)
  3007. Return: AX = color value for specified color index
  3008. Notes:    For FGDRIVER v1.10, this function was unused;"FG_GETINDEX" was AX=0016h
  3009.     This call returns the value passed to it in text and 256-color
  3010.       graphics modes
  3011. SeeAlso: AX=0016h,AX=0034h
  3012. --------V-62003A-----------------------------
  3013. INT 62 u - FGDRIVER v3.03 - "FG_GETKEY" - GET NEXT KEYSTROKE
  3014.     AX = 003Ah
  3015.     ES:BX -> variable pointer record (see below)
  3016. Return: (after next keystroke if no typeahead) variables updated
  3017. Note:    For FGDRIVER v1.10, this function was unused; "FG_GETKEY" was AX=006Eh
  3018. SeeAlso: AX=000Ah,AX=0051h,AX=0054h,AX=00ADh,INT 16/AH=00h
  3019.  
  3020. Format of variable pointer record:
  3021. Offset    Size    Description
  3022.  00h    WORD    segment of BYTE buffer for ASCII keycode
  3023.  02h    WORD    offset of BYTE buffer for ASCII keycode
  3024.  04h    WORD    segment of BYTE buffer for extended keycode
  3025.  06h    WORD    offset of BYTE buffer for extended keycode
  3026. --------V-62003B-----------------------------
  3027. INT 62 u - FGDRIVER v3.03 - "FG_GETLINES" - GET TEXT ROWS FOR CURR VIDEO MODE
  3028.     AX = 003Bh
  3029. Return: AX = number of text rows on screen in current video mode
  3030. Note:    For FGDRIVER v1.10, this function was unused;"FG_GETLINES" was AX=0010h
  3031. SeeAlso: AX=0092h,AX=00A2h
  3032. --------V-62003C-----------------------------
  3033. INT 62 u - FGDRIVER v3.03 - "FG_GETMAP" - STORE IMAGE AS MODE-INDEPENDNT BITMAP
  3034.     AX = 003Ch
  3035.     ES:BX -> buffer for video mode-independent bitmap
  3036.     CX = width of bitmap in bytes
  3037.     DX = height of bitmap in pixel rows
  3038. Return: each bit in bitmap is set if corresponding pixel is of the current
  3039.       color, cleared otherwise
  3040. Notes:    For FGDRIVER v1.10, this function was "FG_GETPAGE" (see AX=0040h);
  3041.       "FG_GETMAP" was AX=0046h
  3042.     This call is ignored in text modes
  3043. SeeAlso: AX=0010h,AX=001Ch,AX=0022h
  3044. --------V-62003D-----------------------------
  3045. INT 62 u - FGDRIVER v3.03 - "FG_GETMAXX" - GET MAXIMUM COLUMN IN SCREEN SPACE
  3046.     AX = 003Dh
  3047. Return: AX = maximum X coordinate in screen space
  3048.         (or character space if in text mode)
  3049. Note:    For FGDRIVER v1.10, this function was "FG_SETPAGE" (see AX=0095h);
  3050.        "FG_GETMAXX" was AX=000Ah
  3051. SeeAlso: AX=003Eh,AX=00A1h
  3052. --------V-62003E-----------------------------
  3053. INT 62 u - FGDRIVER v3.03 - "FG_GETMAXY" - GET MAXIMUM ROW IN SCREEN SPACE
  3054.     AX = 003Eh
  3055. Return: AX = maximum Y coordinate in screen space
  3056.         (or character space if in text mode)
  3057. Note:    For FGDRIVER v1.10, this function was "FG_GETVPAGE" (see AX=0043h);
  3058.        "FG_GETMAXY" was AX=000Bh
  3059. SeeAlso: AX=003Dh,AX=00A1h
  3060. --------V-62003F-----------------------------
  3061. INT 62 u - FGDRIVER v3.03 - "FG_GETMODE" - GET CURRENT VIDEO MODE NUMBER
  3062.     AX = 003Fh
  3063.     ES:BX -> WORD ???
  3064. Return: AX = current video mode number
  3065. Note:    For FGDRIVER v1.10, this function was "FG_SETVPAGE" (see AX=0098h);
  3066.        "FG_GETMODE" was AX=0000h
  3067. SeeAlso: AX=0093h
  3068. --------V-620040-----------------------------
  3069. INT 62 u - FGDRIVER v3.03 - "FG_GETPAGE" - GET ACTIVE VIDEO PAGE NUMBER
  3070.     AX = 0040h
  3071. Return: AX = active video page (0000h-003Fh)
  3072. Note:    For FGDRIVER v1.10, this function was "FG_GETHPAGE" (see AX=0037h);
  3073.        "FG_GETPAGE" was AX=003Ch
  3074. SeeAlso: AX=002Fh,AX=0036h,AX=0037h,AX=0043h,AX=0095h
  3075. --------V-620041-----------------------------
  3076. INT 62 u - FGDRIVER v3.03 - "FG_GETPIXEL" - GET COLOR OF SPECIFIED PIXEL
  3077.     AX = 0041h
  3078.     BX = column in screen space
  3079.     CX = row in screen space
  3080. Return: AX = color value of pixel (0 to num_colors-1)
  3081.         0000h in text modes
  3082. Note:    For FGDRIVER v1.10, this function was "FG_SETHPAGE" (see AX=0091h);
  3083.        "FG_GETPIXEL" was AX=0020h
  3084. SeeAlso: AX=0030h,AX=0032h,AX=0076h,AX=0077h
  3085. --------V-620042-----------------------------
  3086. INT 62 u - FGDRIVER v3.03 - "FG_GETRGB" - GET VIDEO DAC REGISTER CONTENTS
  3087.     AX = 0042h
  3088.     ES:BX -> variable pointer record (see below)
  3089.     CX = DAC register number
  3090. Return: variables updated
  3091. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCATE" (see AX=0000h);
  3092.       "FG_GETRGB" was AX=001Ch
  3093.     This call is ignored in text modes and CGA/EGA video modes (since
  3094.       they do not use DAC registers)
  3095. SeeAlso: AX=0035h,AX=006Fh,AX=008Eh
  3096.  
  3097. Format of variable pointer record:
  3098. Offset    Size    Description
  3099.  00h    WORD    segment of WORD buffer for red component of DAC register
  3100.  02h    WORD    offset of WORD buffer for red component
  3101.  04h    WORD    segment of WORD buffer for green component of DAC register
  3102.  06h    WORD    offset of WORD buffer for green component
  3103.  08h    WORD    segment of WORD buffer for blue component of DAC register
  3104.  0Ah    WORD    offset of WORD buffer for blue component
  3105. --------V-620043-----------------------------
  3106. INT 62 u - FGDRIVER v3.03 - "FG_GETVPAGE" - GET VISIBLE VIDEO PAGE NUMBER
  3107.     AX = 0043h
  3108. Return: AX = visible video page (0000h-003Fh)
  3109. Note:    For FGDRIVER v1.10, this function was "FG_FREEPAGE" (see AX=002Eh);
  3110.       "FG_GETVPAGE" was AX=003Eh
  3111. SeeAlso: AX=0037h,AX=0040h,AX=0098h
  3112. --------V-620044-----------------------------
  3113. INT 62 u - FGDRIVER v3.03 - "FG_GETXJOY" - GET HORIZONTAL POSITION OF JOYSTICK
  3114.     AX = 0044h
  3115.     BX = joystick number (0001h or 0002h)
  3116. Return: AX = horizontal position of joystick
  3117.         FFFFh if joystick uninitialized or not present
  3118. Notes:    For FGDRIVER v1.10, this function was "FG_GETADDR" (see AX=002Fh);
  3119.       "FG_GETXJOY" was AX=0076h
  3120.     The actual coordinates are processor- and joystick-dependent
  3121.     You must call "FG_INITJOY" (AX=004Dh) before using this function
  3122. SeeAlso: AX=0009h,AX=0046h,AX=004Dh,AX=0050h,AX=0061h
  3123. --------V-620045-----------------------------
  3124. INT 62 u - FGDRIVER v3.03 - "FG_GETXPOS" - GET GRAPHICS CURSOR COLUMN
  3125.     AX = 0045h
  3126. Return: AX = screen space X coordinate of graphics cursor position
  3127. Note:    For FGDRIVER v1.10, this function was "FG_RESIZE" (see AX=0082h);
  3128.       "FG_GETXPOS" was AX=0021h
  3129. SeeAlso: AX=0047h,AX=0068h,AX=0069h
  3130. --------V-620046-----------------------------
  3131. INT 62 u - FGDRIVER v3.03 - "FG_GETYJOY" - GET VERTICAL POSITION OF JOYSTICK
  3132.     AX = 0046h
  3133.     BX = joystick number (0001h or 0002h)
  3134. Return: AX = vertical position of joystick
  3135.         FFFFh if joystick uninitialized or not present
  3136. Notes:    For FGDRIVER v1.10, this function was "FG_GETMAP" (see AX=003Ch);
  3137.       "FG_GETYJOY" was AX=0077h
  3138.     The actual coordinates are processor- and joystick-dependent
  3139.     You must call "FG_INITJOY" (AX=004Dh) before using this function
  3140. SeeAlso: AX=0009h,AX=0044h,AX=004Dh,AX=0050h,AX=0061h
  3141. --------V-620047-----------------------------
  3142. INT 62 u - FGDRIVER v3.03 - "FG_GETYPOS" - GET GRAPHICS CURSOR ROW
  3143.     AX = 0047h
  3144. Return: AX = screen space Y coordinate of graphics cursor position
  3145. Note:    For FGDRIVER v1.10, this function was "FG_DRAWMAP" (see AX=001Ch);
  3146.       "FG_GETYPOS" was AX=0022h
  3147. SeeAlso: AX=0045h,AX=0068h,AX=0069h
  3148. --------V-620048-----------------------------
  3149. INT 62 u - FGDRIVER v3.03 - "FG_HUSH" - STOP ASYNCHRONOUS SOUND IMMEDIATELY
  3150.     AX = 0048h
  3151. Notes:    For FGDRIVER v1.10, this function was "FG_GETIMAGE" (see AX=0038h);
  3152.       "FG_HUSH" was AX=008Eh
  3153.     This function immediately stops any sounds started with "FG_MUSICB",
  3154.       "FG_SOUNDS", or "FG_VOICES"; it is ignored if no asynchronous sound
  3155.       is playing
  3156. SeeAlso: AX=0049h,AX=006Bh,AX=009Eh,AX=00ABh
  3157. --------V-620049-----------------------------
  3158. INT 62 u - FGDRIVER v3.03 - "FG_HUSHNEXT" - STOP ASYNCHRONOUS SOUND
  3159.     AX = 0049h
  3160. Program: FGDRIVER is the external video driver for the shareware
  3161.       Fastgraph/Light by Ted Gruber Software
  3162. Notes:    For FGDRIVER v1.10, this function was "FG_DRWIMAGE" (see AX=0022h);
  3163.       "FG_HUSHNEXT" was AX=008Fh
  3164.     This function stops any sounds started with "FG_MUSICB", "FG_SOUNDS",
  3165.       or "FG_VOICES" after the current repetition completes; it is ignored
  3166.       unless asynchronous sound is continuous
  3167. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3168. --------V-62004A-----------------------------
  3169. INT 62 u - FGDRIVER v3.03 - "FG_IMAGEBUF" - SPECIFY TEMPORARY IMAGE BUFFER
  3170.     AX = 004Ah
  3171.     ES:BX -> buffer to be used when creating or displaying GIF/PCX/PPR/SPR
  3172.           images
  3173.     CX = size of buffer in bytes or 0000h to use internal buffer
  3174. Notes:    For FGDRIVER v1.10, this function was "FG_CLPIMAGE" (see AX=0010h);
  3175.       "FG_IMAGEBUF" did not exist yet
  3176.     Fastgraph's internal buffer is 4096 bytes; this function allows the
  3177.       application to define a larger buffer which will typically speed
  3178.       processing
  3179. SeeAlso: AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3180. --------V-62004B-----------------------------
  3181. INT 62 u - FGDRIVER v3.03 - "FG_IMAGESIZ" - DETERMINE IMAGE STORAGE REQUIREMENT
  3182.     AX = 004Bh
  3183.     BX = image width in pixels
  3184.     CX = image height in pixels
  3185. Note:    For FGDRIVER v1.10, this function was "FG_REVIMAGE" (see AX=0085h);
  3186.       "FG_IMAGESIZ" was AX=0062h
  3187. Return: DX:AX = size in bytes of mode-specific bitmap for current video mode
  3188. SeeAlso: AX=0031h,AX=007Dh
  3189. --------V-62004C-----------------------------
  3190. INT 62 u - FGDRIVER v3.03 - "FG_INITEMS" - INITIALIZE EXPANDED MEMORY USE
  3191.     AX = 004Ch
  3192. Return: AX = status
  3193.         0000h successful
  3194.         FFFFh expanded memory manager inaccessible or not installed
  3195. Notes:    For FGDRIVER v1.10, this function was "FG_FLPIMAGE" (see AX=002Ch);
  3196.       "FG_INITEMS" was AX=00A0h
  3197. SeeAlso: AX=0002h,AX=004Eh
  3198. --------V-62004D-----------------------------
  3199. INT 62 u - FGDRIVER v3.03 - "FG_INITJOY" - INITIALIZE JOYSTICK USE
  3200.     AX = 004Dh
  3201.     BX = joystick number (0001h or 0002h)
  3202. Return: AX = status
  3203.         0000h successful
  3204.         FFFFh joystick not connected or no game port
  3205. Notes:    For FGDRIVER v1.10, this function was "FG_DISPLAY" (see AX=0019h);
  3206.       "FG_INITJOY" was AX=0075h
  3207.     Fastgraph assumes that the requested joystick is centered at the time
  3208.       this function is called
  3209. SeeAlso: AX=0009h,AX=0044h,AX=0046h,AX=0050h,AX=0061h
  3210. --------V-62004E-----------------------------
  3211. INT 62 u - FGDRIVER v3.03 - "FG_INITXMS" - INITIALIZE EXTENDED MEMORY USE
  3212.     AX = 004Eh
  3213. Return: AX = status
  3214.         0000h successful
  3215.         FFFFh extended memory manager inaccessible or not installed
  3216. Note:    For FGDRIVER v1.10, this function was "FG_DISPLAYP" (see AX=001Ah);
  3217.       "FG_INITXMS" was AX=00A1h
  3218. SeeAlso: AX=0003h,AX=004Ch
  3219. --------V-62004F-----------------------------
  3220. INT 62 u - FDGRIVER v3.03 - "FG_INSIDE" - CHECK IF POINT INSIDE CONVEX POLYGON
  3221.     AX = 004Fh
  3222.     ES:BX -> vertex array
  3223.     CX = number of vertices
  3224.     DX = screen space column of point to test
  3225.     SI = screen space row of point to test
  3226. Return: AX = result
  3227.         0000h point is outside polygon
  3228.         0001h point is inside polygon
  3229.         undefined if not a convex polygon
  3230. Note:    For FGDRIVER v1.10, this function was "FG_DISPFILE" (see AX=0018h);
  3231.       "FG_INSIDE" did not exist yet
  3232. SeeAlso: AX=0078h,AX=0079h,AX=007Ah
  3233. --------V-620050-----------------------------
  3234. INT 62 u - FGDRIVER v3.03 - "FG_INTJOY" - GET KEYCODES CORRESP TO JOYSTICK POS
  3235.     AX = 0050h
  3236.     CX = joystick number (0001h or 0002h)
  3237.     ES:BX -> variable pointer record (see below)
  3238. Notes:    For FGDRIVER v1.10, this function was "FG_PATTERN" (see AX=0072h);
  3239.       "FG_INTJOY" was AX=0079h
  3240.     If the indicated joystick has not been initialized with AX=0075h, both
  3241.       the button code and joystick position will be set to 00h
  3242.     If either button is pressed, a button code of 0Dh is returned;
  3243.       otherwise, a button code of 00h is returned
  3244. SeeAlso: AX=0009h,AX=0044h,AX=0046h,AX=004Dh,AX=0061h
  3245.  
  3246. Format of variable pointer record:
  3247. Offset    Size    Description
  3248.  00h    WORD    segment of BYTE buffer for button code
  3249.  02h    WORD    offset of BYTE buffer for button code
  3250.  04h    WORD    segment of BYTE buffer for joystick position
  3251.  06h    WORD    offset of BYTE buffer for joystick position
  3252. --------V-620051-----------------------------
  3253. INT 62 u - FGDRIVER v3.03 - "FG_INTKEY" - GET KEYSTROKE, NO WAIT
  3254.     AX = 0051h
  3255.     ES:BX -> variable pointer record (see below)
  3256. Return: variables updated
  3257. Notes:    For FGDRIVER v1.10, this function was "FG_DRAWMASK" (see AX=001Dh);
  3258.       "FG_INTKEY" was AX=006Fh
  3259.     If the keyboard buffer is empty, both the ASCII and extended keycodes
  3260.       are set to 00h
  3261. SeeAlso: AX=000Ah,AX=003Ah,AX=0054h,AX=00ADh,INT 16/AH=01h
  3262.  
  3263. Format of variable pointer record:
  3264. Offset    Size    Description
  3265.  00h    WORD    segment of BYTE buffer for ASCII keycode
  3266.  02h    WORD    offset of BYTE buffer for ASCII keycode
  3267.  04h    WORD    segment of BYTE buffer for extended keycode
  3268.  06h    WORD    offset of BYTE buffer for extended keycode
  3269. --------V-620052-----------------------------
  3270. INT 62 u - FGDRIVER v3.03 - "FG_JUSTIFY" - SET TEXT OUTPUT JUSTIFICATION
  3271.     AX = 0052h
  3272.     BX = horizontal justification
  3273.           (00h centered, 01h right-justified, FFh left-justified)
  3274.     CX = vertical justification
  3275.           (00h centered, 01h top of characters, FFh bottom of chars)
  3276. Note:    For FGDRIVER v1.10, this function was "FG_CLIPMASK" (see AX=000Fh);
  3277.       "FG_JUSTIFY" did not exist yet
  3278. SeeAlso: AX=000Ch,AX=002Dh,AX=007Ch
  3279. --------V-620053-----------------------------
  3280. INT 62 u - FGDRIVER v3.03 - "FG_KBINIT" - ENABLE/DISABLE LOW-LEVEL KBD HANDLER
  3281.     AX = 0053h
  3282.     BX = new state (0000h disabled, 0001h enabled)
  3283. Notes:    For FGDRIVER v1.10, this function was "FG_REVMASK" (see AX=0086h);
  3284.       "FG_KBINIT" did not exist yet
  3285.     When the low-level handler is enabled, "FG_GETKEY", "FG_INTKEY",
  3286.       "FG_WAITKEY", and all other functions calling DOS or BIOS keyboard
  3287.       services become unavailable
  3288. SeeAlso: AX=0054h
  3289. --------V-620054-----------------------------
  3290. INT 62 u - FGDRIVER v3.03 - "FG_KBTEST" - CHECK WHETHER SPECIFIED KEY PRESSED
  3291.     AX = 0054h
  3292.     BX = scan code of desired key
  3293. Return: AX = state
  3294.         0000h key is not pressed
  3295.         0001h key is currently pressed
  3296. Notes:    For FGDRIVER v1.10, this function was "FG_FLIPMASK" (see AX=002Ah);
  3297.       "FG_KBTEST" did not exist yet
  3298.     The low-level keyboard handler must have been enabled with AX=0053h
  3299. SeeAlso: AX=0053h,INT 16/AH=01h
  3300. --------V-620055-----------------------------
  3301. INT 62 u - FGDRIVER v3.03 - "FG_LOCATE" - SET TEXT-MODE CURSOR POSITION
  3302.     AX = 0055h
  3303.     BX = row
  3304.     CX = column
  3305. Notes:    For FGDRIVER v1.10, this function was unused; "FG_LOCATE" was AX=0033h
  3306.     There are only eight text cursors shared by successive groups of
  3307.       eight video pages (pages 0, 8, 16, ... share one cursor, 1, 9, ...
  3308.       share the second, etc)
  3309. SeeAlso: AX=0045h,AX=0047h,AX=0068h,AX=00AFh
  3310. --------V-620056-----------------------------
  3311. INT 62 u - FGDRIVER v3.03 - UNUSED
  3312.     AX = 0056h
  3313. Return: AX destroyed
  3314. --------V-620057-----------------------------
  3315. INT 62 u - FGDRIVER v3.03 - "FG_MAKEPCX" - CREATE PCX FILE FROM SCREEN WINDOW
  3316.     AX = 0057h
  3317.     BX = left edge in screen space units
  3318.     CX = right edge in screen space units
  3319.     DX = top edge in screen space units
  3320.     SI = bottom edge in screen space units
  3321.     ES:DI -> ASCIZ filename of PCX file to create
  3322. Return: AX = status
  3323.         0000h successful
  3324.         0001h file not created
  3325. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MAKEPCX" was AX=0061h
  3326.     The PCX file is created from the specified region of the active video
  3327.       page; the left and right edges are adjusted to a byte boundary if
  3328.       necessary
  3329.     If the specified file already exists, it is overwritten
  3330.     This call is ignored in text and Hercules low-resolution graphics modes
  3331. SeeAlso: AX=004Ah,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3332. --------V-620058-----------------------------
  3333. INT 62 u - FGDRIVER v3.03 - "FG_MAKEPPR" - CREATE PACKED PIXEL RUN FILE
  3334.     AX = 0058h
  3335.     BX = left edge in screen space units
  3336.     CX = right edge in screen space units
  3337.     DX = top edge in screen space units
  3338.     SI = bottom edge in screen space units
  3339.     ES:DI -> ASCIZ filename of PPR file to create
  3340. Return: AX = status
  3341.         0000h successful
  3342.         0001h file not created
  3343. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MAKEPPR" did not
  3344.       exist yet
  3345.     The PPR file is created from the specified region of the active video
  3346.       page; the left and right edges are adjusted to byte boundaries if
  3347.       necessary
  3348.     If the specified file already exists, it is overwritten
  3349.     This call is ignored in text modes
  3350. SeeAlso: AX=004Ah,AX=0057h,AX=0059h,AX=009Ah,AX=009Bh,AX=009Ch
  3351. --------V-620059-----------------------------
  3352. INT 62 u - FGDRIVER v3.03 - "FG_MAKESPR" - CREATE STANDARD PIXEL RUN FILE
  3353.     AX = 0059h
  3354.     BX = left edge in screen space units
  3355.     CX = right edge in screen space units
  3356.     DX = top edge in screen space units
  3357.     SI = bottom edge in screen space units
  3358.     ES:DI -> ASCIZ filename of SPR file to create
  3359. Return: AX = status
  3360.         0000h successful
  3361.         0001h file not created
  3362. Note:    For FGDRIVER v1.10, this function was unused; "FG_MAKESPR" did not
  3363.       exist yet
  3364.     The SPR file is created from the specified region of the active video
  3365.       page; the left and right edges are adjusted to byte boundaries if
  3366.       necessary
  3367.     If the specified file already exists, it is overwritten
  3368.     This call is ignored in text modes
  3369. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=009Ah,AX=009Bh,AX=009Ch
  3370. --------V-62005A-----------------------------
  3371. INT 62 u - FGDRIVER v3.03 - "FG_MAPRGB" - MAP COLOR COMPONENTS INTO PALETTE VAL
  3372.     AX = 005Ah
  3373.     BX = red component
  3374.     CX = green component
  3375.     DX = blue component
  3376. Return: AX = mode-specific palette value corresponding to specified components
  3377. Notes:    For FGDRIVER v1.10, this function was "FG_SAVE" (see AX=0087h);
  3378.       "FG_MAPRGB" was AX=001Dh
  3379.     This function is only meaningful in 16-color graphics modes
  3380. SeeAlso: AX=0042h,AX=0096h
  3381. --------V-62005B-----------------------------
  3382. INT 62 u - FGDRIVER v3.03 - "FG_MEASURE" - GET DELAY UNITS PER CLOCK TICK
  3383.     AX = 005Bh
  3384. Return: AX = delay units per clock tick (processor-dependent)
  3385. Notes:    For FGDRIVER v1.10, this function was "FG_RESTORE" (see AX=0083h);
  3386.       "FG_MEASURE" was AX=0098h
  3387.     These delay units are used by "FG_STALL" (see AX=009Fh)
  3388. SeeAlso: AX=009Fh
  3389. --------V-62005C-----------------------------
  3390. INT 62 u - FGDRIVER v3.03 - "FG_MEMAVAIL" - QUERY AMOUNT OF FREE MEMORY
  3391.     AX = 005Ch
  3392. Return: DX:AX = number of bytes of conventional memory available
  3393. Note:    For FGDRIVER v1.10, this function was "FG_TRANSFER" (see AX=00A9h);
  3394.       "FG_MEMAVAIL" was AX=009Bh
  3395. SeeAlso: AX=004Ch,AX=005Dh
  3396. --------V-62005D-----------------------------
  3397. INT 62 u - FGDRIVER v3.03 - "FG_MEMORY" - GET SIZE OF VIDEO MEMORY
  3398.     AX = 005Dh
  3399. Return: AX = size of video memory in KB
  3400. Notes:    For FGDRIVER v1.10, this function was "FG_TCXFER" (see AX=00A6h);
  3401.       "FG_MEMORY" did not exist yet
  3402.     You must first call "FG_SVGAINIT" (see AX=00A1h) before using this
  3403.       function
  3404. SeeAlso: AX=005Ch
  3405. --------V-62005E-----------------------------
  3406. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEBUT" - GET MOUSE BUTTON PRESS/RELEASE CNTS
  3407.     AX = 005Eh
  3408.     CX = mouse button (1 = left press, 2 = right press, 3 = middle press,
  3409.               -1=left release, -2=right release, -3=middle release)
  3410.     ES:BX -> variable pointer record (see below)
  3411. Return: variables updated
  3412. Notes:    For FGDRIVER v1.10, this function was "FG_TCMASK" (see AX=00A5h);
  3413.       "FG_MOUSEBUT" was AX=007Ch
  3414.     This function returns the count of presses or releases since the last
  3415.       call to this function; if the count is zero, row and column will
  3416.       also be zero
  3417. SeeAlso: AX=005Fh,AX=0061h,AX=0064h
  3418.  
  3419. Format of variable pointer record:
  3420. Offset    Size    Description
  3421.  00h    WORD    segment of WORD buffer for press/release count
  3422.  02h    WORD    offset of WORD buffer for press/release count
  3423.  04h    WORD    segment of WORD buffer for screen space col of last press/rls
  3424.  06h    WORD    offset of WORD buffer for screen space col of last press/rels
  3425.  08h    WORD    segment of WORD buffer for screen space row of last press/rls
  3426.  0Ah    WORD    offset of WORD buffer for screen space row of last press/rls
  3427. --------V-62005F-----------------------------
  3428. INT 62 u - FGDRIVER v3.03 - "FG_MOUSECUR" - SPECIFY TEXT-MODE MOUSE CURSOR
  3429.     AX = 005Fh
  3430.     BX = screen mask
  3431.     CX = cursor mask
  3432. Notes:    For FGDRIVER v1.10, this function was "FG_COPYPAGE" (see AX=0012h);
  3433.       "FG_MOUSECUR" was AX=007Eh
  3434.     This call is ignored in graphics modes
  3435. SeeAlso: AX=0065h,AX=0067h
  3436. --------V-620060-----------------------------
  3437. INT 62 u - FGDRIVER v1.10 only - "FG_DISPPCX" - DISPLAY PCX FILE
  3438.     AX = 0060h
  3439.     ES:BX -> ASCIZ filename
  3440.     CX = flags
  3441.         bit 0: use current palette rather than PCX file's palette
  3442.         bits 1-15 reserved (0)
  3443. Return: AX = status
  3444.         0000h success
  3445.         0001h file not found
  3446.         0002h file is not a valid PCX file
  3447. Notes:    This call is ignored in text modes and Hercules low-resolution graphics
  3448.     The image is displayed with its upper left corner at the current
  3449.       graphics cursor position
  3450. SeeAlso: AX=009Ah
  3451. --------V-620060-----------------------------
  3452. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEFIN" - UNHOOK FASTGRAPH MOUSE HANDLER
  3453.     AX = 0060h
  3454. Notes:    For FGDRIVER v1.10, this function was "FG_DISPPCX", which no longer
  3455.       exists; "FG_MOUSEFIN" did not exist yet
  3456.     This function should be called before switching back to text mode if
  3457.       "FG_MOUSEINI" was called while in an SVGA graphics mode
  3458. SeeAlso: AX=0061h
  3459. --------V-620061-----------------------------
  3460. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEINI" - INITIALIZE MOUSE SUPPORT
  3461.     AX = 0061h
  3462. Return: AX = status
  3463.         0002h two-button mouse
  3464.         0003h three-button mouse
  3465.         FFFFh initialization failed
  3466. Notes:    For FGDRIVER v1.10, this function was "FG_MAKEPCX" (see AX=0057h);
  3467.       "FG_MOUSEINI" was AX=007Ah
  3468.     After this call, the mouse cursor is invisible
  3469. SeeAlso: AX=0060h"3.03",AX=0062h,AX=0066h
  3470. --------V-620062-----------------------------
  3471. INT 62 u - FGDRIVER v3.03 - "FG_MOUSELIM" - SPECIFY MOUSE CURSOR LIMITS
  3472.     AX = 0062h
  3473.     BX = left-most position allowed for mouse cursor
  3474.     CX = right-most position allowed
  3475.     DX = top-most position allowed
  3476.     SI = bottom-most position allowed
  3477. Note:    For FGDRIVER v1.10, this function was "FG_IMAGESIZ" (see AX=004Bh);
  3478.       "FG_MOUSELIM" was AX=0080h
  3479. SeeAlso: AX=0061h,AX=0063h,INT 33/AX=0007h,INT 33/AX=0008h
  3480. --------V-620063-----------------------------
  3481. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEMOV" - SET MOUSE CURSOR POSITION
  3482.     AX = 0063h
  3483.     BX = new column
  3484.     CX = new row
  3485. Notes:    For FGDRIVER v1.10, this function was unused;"FG_MOUSEMOV" was AX=0081h
  3486.     This function will not move the mouse cursor outside the bounding box
  3487.       specified with AX=0080h
  3488. SeeAlso: AX=0062h,AX=0064h,INT 33/AX=0004h
  3489. --------V-620064-----------------------------
  3490. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEPOS" - GET CURRENT MOUSE POSITION
  3491.     AX = 0064h
  3492.     ES:BX -> variable pointer record (see below)
  3493. Notes:    For FGDRIVER v1.10, this function was "FG_FADEIN" (see AX=0027h);
  3494.       "FG_MOUSEPOS" was AX=007Dh
  3495. SeeAlso: AX=0063h
  3496.  
  3497. Format of variable pointer record:
  3498. Offset    Size    Description
  3499.  00h    WORD    segment of WORD buffer for mouse column
  3500.  02h    WORD    offset of WORD buffer for mouse column
  3501.  04h    WORD    segment of WORD buffer for mouse row
  3502.  06h    WORD    offset of WORD buffer for mouse row
  3503.  08h    WORD    segment of WORD buffer for button status
  3504.  0Ah    WORD    offset of WORD buffer for button status
  3505. Note:    button status: bit 0 = left button, bit 1 = right, bit 2 = middle
  3506. --------V-620065-----------------------------
  3507. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEPTR" - SPECIFY GRAPH-MODE MOUSE CURSOR
  3508.     AX = 0065h
  3509.     ES:BX -> masks (16-byte screen mask followed by 16-byte cursor mask)
  3510.     CX = X offset of hot spot from upper left corner
  3511.     DX = Y offset of hot spot from upper left corner
  3512. Notes:    For FGDRIVER v1.10, this function was "FG_FADEOUT" (see AX=0028h);
  3513.       "FG_MOUSEPTR" was AX=007Fh
  3514.     This call is ignored in text modes
  3515. SeeAlso: AX=005Fh,INT 33/AX=0009h
  3516. --------V-620066-----------------------------
  3517. INT 62 u - FGDRIVER v3.03 - "FG_MOUSESPD" - SET MOUSE CURSOR SPEED
  3518.     AX = 0066h
  3519.     BX = horizontal mickeys per eight pixels of movement (default 16)
  3520.     CX = vertical mickeys per eight pixels of movement (default 16)
  3521. Note:    For FGDRIVER v1.10, this function was "FG_PAN" (see AX=0071h);
  3522.       "FG_MOUSESPD" was AX=0082h
  3523. SeeAlso: INT 33/AX=000Fh,INT 33/AX=001Ah
  3524. --------V-620067-----------------------------
  3525. INT 62 u - FGDRIVER v3.03 - "FG_MOUSEVIS" - SET MOUSE CURSOR VISIBILITY
  3526.     AX = 0067h
  3527.     BX = new state (0000h invisible, 0001h visible)
  3528. Note:    For FGDRIVER v1.10, this function was "FG_SCROLL" (see AX=0089h);
  3529.       "FG_MOUSEVIS" was AX=007Bh
  3530. SeeAlso: AX=0061h,INT 33/AX=0001h,INT 33/AX=0002h
  3531. --------V-620068-----------------------------
  3532. INT 62 u - FGDRIVER v3.03 - "FG_MOVE" - SET GRAPHICS CURSOR POSITION
  3533.     AX = 0068h
  3534.     BX = new column
  3535.     CX = new row
  3536. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MOVE" was AX=0023h
  3537.     This call is ignored in text modes
  3538. SeeAlso: AX=0045h,AX=0047h,AX=0055h,AX=0063h,AX=0069h,AX=00AFh
  3539. --------V-620069-----------------------------
  3540. INT 62 u - FGDRIVER v3.03 - "FG_MOVEREL" - ADJUST GRAPHICS CURSOR POSITION
  3541.     AX = 0069h
  3542.     BX = column offset
  3543.     CX = row offset
  3544. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MOVEREL" was AX=0024h
  3545.     This call is ignored in text modes
  3546. SeeAlso: AX=0045h,AX=0047h,AX=0068h
  3547. --------V-62006A-----------------------------
  3548. INT 62 u - FGDRIVER v3.03 - "FG_MUSIC" - PLAY SERIES OF NOTES
  3549.     AX = 006Ah
  3550.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  3551. Return: after music completed
  3552. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MUSIC" was AX=008Ch
  3553.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  3554.       AX=008Dh) is already in progress
  3555. SeeAlso: AX=006Bh,AX=009Dh,AX=00AAh
  3556. --------V-62006B-----------------------------
  3557. INT 62 u - FGDRIVER v3.03 - "FG_MUSICB" - PLAY SERIES OF NOTES IN BACKGROUND
  3558.     AX = 006Bh
  3559.     CX = number of repetitions (negative = continuous play)
  3560.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  3561. Notes:    For FGDRIVER v1.10, this function was unused; "FG_MUSICB" was AX=008Dh
  3562.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  3563.       AX=008Dh) is already in progress
  3564. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3565. --------V-62006C-----------------------------
  3566. INT 62 u - FGDRIVER v3.03 - "FG_NUMLOCK" - GET STATE OF NUMLOCK KEY
  3567.     AX = 006Ch
  3568. Return: AX = NumLock state (0000h off, 0001h on)
  3569. Note:    For FGDRIVER v1.10, this function was unused; "FG_NUMLOCK" was AX=0072h
  3570. SeeAlso: AX=000Ah,AX=0088h,AX=008Bh,AX=0094h
  3571. --------V-62006D-----------------------------
  3572. INT 62 u - FGDRIVER v3.03 - "FG_PAGESIZE" - GET VIDEO PAGE SIZE FOR CURR MODE
  3573.     AX = 006Dh
  3574. Return: DX:AX = page size in bytes
  3575. Note:    For FGDRIVER v1.10, this function was "FG_WAITKEY" (see AX=00ADh);
  3576.       "FG_PAGESIZE" did not exist yet
  3577. SeeAlso: AX=005Dh
  3578. --------V-62006E-----------------------------
  3579. INT 62 u - FGDRIVER v3.03 - "FG_PAINT" - FLOOD CLOSED REGION WITH COLOR
  3580.     AX = 006Eh
  3581.     BX = column
  3582.     CX = row
  3583. Notes:    For FGDRIVER v1.10, this function was "FG_GETKEY" (see AX=003Ah);
  3584.        "FG_PAINT" was AX=002Fh
  3585.     This function fills an arbitrary closed region around the specified
  3586.       point with the current color; the screen edges are not considered
  3587.       region boundaries
  3588.     This call is ignored in text modes
  3589. SeeAlso: AX=002Bh
  3590. --------V-62006F-----------------------------
  3591. INT 62 u - FGDRIVER v3.03 - "FG_PALETTE" - SET PALETTE / SET VIDEO DAC REGISTER
  3592.     AX = 006Fh
  3593. ---CGA 4-color graphics---
  3594.     BX = CGA paletee number
  3595.     CX = background color
  3596. ---CGA 2-color graphics---
  3597.     BX ignored
  3598.     CX = foreground color
  3599. ---16-color graphics---
  3600.     BX = palette register number
  3601.     CX = palette value
  3602. ---256-color graphics---
  3603.     BX = DAC register number
  3604.     CX =  DAC value
  3605. Notes:    For FGDRIVER v1.10, this function was "FG_INTKEY" (see AX=0051h);
  3606.        "FG_PALETTE" was AX=0017h
  3607.     This function is ignored in text modes and Hercules graphics modes
  3608.     Few EGA/VGA adapters correctly set the foreground color in CGA mode 6
  3609. SeeAlso: AX=0035h,AX=0042h,AX=0070h,AX=008Eh
  3610. --------V-620070-----------------------------
  3611. INT 62 u - FGDRIVER v3.03 - "FG_PALETTES" - SET ALL PALETTE REGISTERS
  3612.     AX = 0070h
  3613.     ES:BX -> array of 16 WORDs containing values for palette registers
  3614.         (or first 16 DAC registers in 256-color modes)
  3615. Notes:    For FGDRIVER v1.10, this function was "FG_CAPSLOCK" (see AX=000Ah);
  3616.        "FG_PALETTES" was AX=0018h
  3617.     This function is ignored in text modes, CGA and Hercules graphics modes
  3618. SeeAlso: AX=0035h,AX=0042h,AX=006Fh,AX=008Eh
  3619. --------V-620071-----------------------------
  3620. INT 62 u - FGDRIVER v3.03 - "FG_PAN" - SET SCREEN ORIGIN
  3621.     AX = 0071h
  3622.     BX = new column for screen origin
  3623.     CX = new row for screen origin
  3624. Note:    For FGDRIVER v1.10, this function was "FG_SETCAPS" (see AX=008Bh);
  3625.        "FG_PAN" was AX=0066h
  3626. SeeAlso: AX=0095h
  3627. --------V-620072-----------------------------
  3628. INT 62 u - FGDRIVER v3.03 - "FG_PATTERN" - SPECIFY DISPLAY PATTERN FOR COLOR
  3629.     AX = 0072h
  3630.     BX = index of pattern to define
  3631.     CX = number of predefined display pattern
  3632. Notes:    For FGDRIVER v1.10, this function was "FG_NUMLOCK" (see AX=006Ch);
  3633.        "FG_PATTERN" was AX=0050h
  3634.     When displaying a pixel run map, Fastgraph uses the pattern associated
  3635.       with each color index rather than displaying the actual color
  3636.     This call has no effect in text and 256-color graphics modes
  3637. SeeAlso: AX=0021h,AX=0039h
  3638. --------V-620073-----------------------------
  3639. INT 62 u - FGDRIVER v3.03 - "FG_PCXHEAD" - GET PCX FILE HEADER
  3640.     AX = 0073h
  3641.     ES:BX -> variable pointer record (see below)
  3642. Return: AX = status
  3643.         0000h successful
  3644.         FFFEh not a PCX file
  3645.         FFFFh file does not exist
  3646. Note:    For FGDRIVER v1.10, this function was "FG_SETNUM" (see AX=0094h);
  3647.        "FG_PCXHEAD" did not exist yet
  3648. SeeAlso: AX=0074h,AX=009Ah
  3649.  
  3650. Format of variable pointer record:
  3651. Offset    Size    Description
  3652.  00h    WORD    segment of ASCIZ filename
  3653.  02h    WORD    offset of ASCIZ filename
  3654.  04h    WORD    segment of 128-byte buffer for PCX header
  3655.  06h    WORD    offset of 128-byte buffer for PCX header
  3656. --------V-620074-----------------------------
  3657. INT 62 u - FGDRIVER v3.03 - "FG_PCXMODE" - GET OPTIMAL VIDEO MODE FOR DISPLAY
  3658.     AX = 0074h
  3659.     ES:BX -> PCX header (see AX=0073h)
  3660. Return: AX = optimal video mode for PCX file
  3661.         FFFEh not a valid PCX header
  3662.         FFFFh unable to determine compatible video mode
  3663. Note:    For FGDRIVER v1.10, this function was "FG_SCRLOCK" (see AX=0088h);
  3664.        "FG_PCXMODE" did not exist yet
  3665. SeeAlso: AX=0073h,AX=009Ah
  3666. --------V-620075-----------------------------
  3667. INT 62 u - FGDRIVER v3.03 - "FG_PLAYING" - DETERMINE WHETHER ASYNC SOUND ACTIVE
  3668.     AX = 0075h
  3669. Return: AX = sound state (0 = no asynchronous sound, 1 = async sound playing)
  3670. Note:    For FGDRIVER v1.10, this function was "FG_INITJOY" (see AX=004Dh);
  3671.        "FG_PLAYING" was AX=0091h
  3672. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00ABh
  3673. --------V-620076-----------------------------
  3674. INT 62 u - FGDRIVER v3.03 - "FG_POINT" - DISPLAY A PIXEL
  3675.     AX = 0076h
  3676.     BX = column
  3677.     CX = row
  3678. Notes:    For FGDRIVER v1.10, this function was "FG_GETXJOY" (see AX=0044h);
  3679.        "FG_POINT" was AX=001Fh
  3680.     This call is ignored in text modes
  3681. SeeAlso: AX=0006h,AX=001Bh,AX=0041h,AX=0077h
  3682. --------V-620077-----------------------------
  3683. INT 62 u - FGDRIVER v3.03 - "FG_POINTX" - DISPLAY A PIXEL IN XOR MODE
  3684.     AX = 0077h
  3685.     BX = column
  3686.     CX = row
  3687. Notes:    For FGDRIVER v1.10, this function was "FG_GETYJOY" (see AX=0046h);
  3688.        "FG_POINTX" did not exist yet
  3689.     This call is ignored in text modes
  3690. SeeAlso: AX=0041h,AX=0076h
  3691. --------V-620078-----------------------------
  3692. INT 62 u - FGDRIVER v3.03 - "FG_POLYFILL" - DRAW A FILLED CONVEX POLYGON
  3693.     AX = 0078h
  3694.     CX = number of vertices
  3695.     ES:BX -> variable pointer record (see below)
  3696. Notes:    For FGDRIVER v1.10, this function was "FG_BUTTON" (see AX=0009h);
  3697.        "FG_POLYFILL" did not exist yet
  3698.     The vertex array consists of pairs of words specifying the X and Y
  3699.       coordinates of each vertex; the work array is used internally and
  3700.       must contain at least four times as many bytes as the polygon is
  3701.       high in pixels
  3702.     This function is ignored in text modes
  3703.     If the polygon is non-convex, only a portion of it may be filled
  3704. SeeAlso: AX=000Eh,AX=0025h,AX=0079h,AX=007Ah,AX=007Bh
  3705.  
  3706. Format of variable pointer record:
  3707. Offset    Size    Description
  3708.  00h    WORD    segment of vertex array
  3709.  02h    WORD    offset of vertex array
  3710.  04h    WORD    segment of work array
  3711.  06h    WORD    offset of work array
  3712. --------V-620079-----------------------------
  3713. INT 62 u - FGDRIVER v3.03 - "FG_POLYGON" - DRAW AN UNFILLED POLYGON
  3714.     AX = 0079h
  3715.     CX = number of vertices in polygon
  3716.     ES:BX -> variable pointer record (see below)
  3717. Notes:    For FGDRIVER v1.10, this function was "FG_INTJOY" (see AX=0050h);
  3718.        "FG_POLYGON" was AX=002Eh
  3719.     This call is ignored in text modes
  3720. SeeAlso: AX=0078h,AX=007Ah,AX=007Bh
  3721.  
  3722. Format of variable pointer record:
  3723. Offset    Size    Description
  3724.  00h    WORD    segment of WORD array containing vertex columns
  3725.  02h    WORD    offset of WORD array containing vertex columns
  3726.  04h    WORD    segment of WORD array containing vertex rows
  3727.  06h    WORD    offset of WORD array containing vertex rows
  3728. --------V-62007A-----------------------------
  3729. INT 62 u - FGDRIVER v3.03 - "FG_POLYLINE" - DRAW AN UNFILLED POLYGON
  3730.     AX = 007Ah
  3731.     CX = number of vertices in polygon
  3732.     ES:BX -> vertex array (see below)
  3733. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEINI" (see AX=0061h);
  3734.        "FG_POLYLINE" did not exist yet
  3735.     This function is equivalent to "FG_POLYGON", but uses only a single
  3736.       array to define the vertices
  3737.     This call is ignored in text modes
  3738. SeeAlso: AX=0076h,AX=0078h,AX=0079h,AX=007Bh
  3739.  
  3740. Format of vertex array element:
  3741. Offset    Size    Description
  3742.  00h    WORD    column
  3743.  02h    WORD    row
  3744. --------V-62007B-----------------------------
  3745. INT 62 u - FGDRIVER v3.03 - "FG_POLYOFF" - DEFINE POLYGON DRAWING OFFSET
  3746.     AX = 007Bh
  3747.     BX = horizontal offset (default 0)
  3748.     CX = vertical offset (default 0)
  3749. Desc:    define the offsets applied to all vertices of polygons drawn with
  3750.       "FG_POLYFILL" or "FG_POLYLINE"
  3751. Note:    For FGDRIVER v1.10, this function was "FG_MOUSEVIS" (see AX=0067h);
  3752.        "FG_POLYOFF" did not exist yet
  3753. SeeAlso: AX=0078h,AX=007Ah
  3754. --------V-62007C-----------------------------
  3755. INT 62 u - FGDRIVER v3.03 - "FG_PRINT" - DISPLAY STRING OF HARDWARE CHARACTERS
  3756.     AX = 007Ch
  3757.     CX = length of string
  3758.     ES:BX -> string to display
  3759. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEBUT" (see AX=005Eh);
  3760.        "FG_PRINT" did not exist yet
  3761.     The string is displayed in the current color, and the graphics cursor
  3762.       is updated to be just to the right of the last displayed character
  3763.     This function is ignored in text modes
  3764. SeeAlso: AX=000Ch,AX=002Dh,AX=0052h
  3765. --------V-62007D-----------------------------
  3766. INT 62 u - FGDRIVER v3.03 - "FG_PUTBLOCK" - RESTORE RECTANGLE OF DISPLAY
  3767.     AX = 007Dh
  3768.     ES:BX -> buffer containing previously-saved image
  3769.     CX = left edge
  3770.     DX = right edge
  3771.     SI = top edge
  3772.     DI = bottom edge
  3773. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEPOS" (see AX=0064h);
  3774.        "FG_PUTBLOCK" did not exist yet
  3775.     In text modes, coordinates are character positions; in graphics modes,
  3776.       they are defined in screen space, and the left and right edges are
  3777.       adjusted to a byte boundary if necessary
  3778. SeeAlso: AX=0031h,AX=007Eh
  3779. --------V-62007E-----------------------------
  3780. INT 62 u - FGDRIVER v3.03 - "FG_PUTIMAGE" - DISPLAY MODE-SPECIFIC BITMAP IMAGE
  3781.     AX = 007Eh
  3782.     ES:BX -> buffer containing mode-specific bitmap
  3783.     CX = width in bytes
  3784.     DX = height in pixel rows
  3785. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSECUR" (see AX=005Fh);
  3786.        "FG_PUTIMAGE" did not exist yet
  3787.     The bitmap is displayed with its lower left corner at the graphics
  3788.       cursor position; color 0 is NOT treated as transparent
  3789. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=007Dh
  3790. --------V-62007F-----------------------------
  3791. INT 62 u - FGDRIVER v3.03 - "FG_QUIET" - STOP CONTINUOUS SYNCHRONOUS SOUND
  3792.     AX = 007Fh
  3793. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEPTR" (see AX=0065h);
  3794.       "FG_QUIET" was AX=0090h
  3795.     This call has no effect if there is no continuous sound playing
  3796. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00ABh
  3797. --------V-620080-----------------------------
  3798. INT 62 u - FGDRIVER v3.03 - "FG_RECT" - DRAW UNFILLED RECTANGLE IN SCREEN SPACE
  3799.     AX = 0080h
  3800.     BX = left edge column
  3801.     CX = right edge column
  3802.     DX = top edge row
  3803.     SI = bottom edge row
  3804. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSELIM" (see AX=0062h);
  3805.       "FG_RECT" was AX=002Ah
  3806. SeeAlso: AX=0006h,AX=0011h,AX=0021h,AX=0031h
  3807. --------V-620081-----------------------------
  3808. INT 62 u - FGDRIVER v3.03 - "FG_RESET" - ERASE SCREEN AND RESTORE SCREEN ATTR
  3809.     AX = 0081h
  3810. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSEMOV" (see AX=0063h);
  3811.       "FG_RESET" was AX=0006h
  3812.     This call is ignored in graphics modes
  3813.     The screen attributes are only restored if ANSI.SYS is loaded
  3814. SeeAlso: AX=0026h,AX=0093h
  3815. --------V-620082-----------------------------
  3816. INT 62 u - FGDRIVER v3.03 - "FG_RESIZE" - SET GRAPHICS MODE VIDEO PAGE SIZE
  3817.     AX = 0082h
  3818.     BX = new page width in pixels
  3819.     CX = new page height in pixels
  3820. Notes:    For FGDRIVER v1.10, this function was "FG_MOUSESPD" (see AX=0066h);
  3821.       "FG_RESIZE" was AX=0045h
  3822.     The visible page must be set to 0000h before making this call
  3823.     The mouse, joysticks, expanded memory, and extended memory must be
  3824.       reinitialized after this call
  3825. SeeAlso: AX=006Dh,AX=008Fh
  3826. --------V-620083-----------------------------
  3827. INT 62 u - FGDRIVER v3.03 - "FG_RESTORE" - COPY REGION FROM HIDDEN TO VIS PAGE
  3828.     AX = 0083h
  3829.     BX = left edge column
  3830.     CX = right edge column
  3831.     DX = top edge row
  3832.     SI = bottom edge row
  3833. Notes:    For FGDRIVER v1.10, this function was unused; "FG_RESTORE" was AX=005Bh
  3834.     The left and right edges are adjusted to byte boundaries if necessary
  3835. SeeAlso: AX=0087h,AX=00A6h
  3836. --------V-620084-----------------------------
  3837. INT 62 u - FGDRIVER v3.03 - "FG_RESUME" - RESTART ASYNCHRONOUS SOUND
  3838.     AX = 0084h
  3839. Notes:    For FGDRIVER v1.10, this function was unused; "FG_RESUME" was AX=0092h
  3840. SeeAlso: AX=009Eh,AX=00A0h
  3841. --------V-620085-----------------------------
  3842. INT 62 u - FGDRIVER v3.03 - "FG_REVIMAGE" - DISPLAY REVERSED IMAGE (BITMAP)
  3843.     AX = 0085h
  3844.     ES:BX -> mode-specific bitmap
  3845.     CX = width of bitmap in bytes
  3846.     DX = height of bitmap in pixel rows
  3847. Notes:    For FGDRIVER v1.10, this function was unused;"FG_REVIMAGE" was AX=004Bh
  3848.     This call is ignored in text modes
  3849.     The image is drawn with its lower left corner at the current graphics
  3850.       cursor position
  3851. SeeAlso: AX=0010h,AX=0022h,AX=002Ch,AX=0038h,AX=0086h,AX=008Ch,AX=009Ah
  3852. --------V-620086-----------------------------
  3853. INT 62 u - FGDRIVER v3.03 - "FG_REVMASK" - DISPLAY REVERSED IMAGE (MASKING MAP)
  3854.     AX = 0086h
  3855.     ES:BX -> array containing image stored as a masking map (see AX=001Dh)
  3856.     CX = number of pixel runs in masking map
  3857.     DX = width of masking map in pixels
  3858. Notes:    For FGDRIVER v1.10, this function was unused; "FG_REVMASK" was AX=0053h
  3859.     This call is ignored in text modes and in native EGA and VGA graphics
  3860.       modes
  3861.     The image is drawn with its lower left corner at the current graphics
  3862.       cursor position
  3863. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ah,AX=0085h,AX=008Ch,AX=00A5h
  3864. --------V-620087-----------------------------
  3865. INT 62 u - FGDRIVER v3.03 - "FG_SAVE" - COPY REGION FROM VISIBLE TO HIDDEN PAGE
  3866.     AX = 0087h
  3867.     BX = left edge column
  3868.     CX = right edge column
  3869.     DX = top edge row
  3870.     SI = bottom edge row
  3871. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SAVE" was AX=005Ah
  3872.     The left and right edges are adjusted to byte boundaries if necessary
  3873. SeeAlso: AX=0083h,AX=00A6h
  3874. --------V-620088-----------------------------
  3875. INT 62 u - FGDRIVER v3.03 - "FG_SCRLOCK" - GET STATE OF SCROLL LOCK KEY
  3876.     AX = 0088h
  3877. Return: AX = ScrollLock state (0000h off, 0001h on)
  3878. Program: FGDRIVER is the external video driver for the shareware
  3879.       Fastgraph/Light by Ted Gruber Software
  3880. Note:    For FGDRIVER v1.10, this function was "FG_SOUND" (see AX=009Dh);
  3881.       "FG_SCRLOCK" was AX=0074h
  3882. SeeAlso: AX=000Ah,AX=006Ch,AX=008Bh,AX=0094h
  3883. --------V-620089-----------------------------
  3884. INT 62 u - FGDRIVER v3.03 - "FG_SCROLL" - VERTICALLY SCROLL SCREEN REGION
  3885.     AX = 0089h
  3886.     BX = left edge column
  3887.     CX = right edge column
  3888.     DX = top edge row
  3889.     SI = bottom edge row
  3890.     DI = number of pixels by which to scroll (positive scrolls up,
  3891.         negative scrolls down)
  3892.     ES = type of scroll
  3893.         0000h circular (rows scrolled off are copied to vacated rows)
  3894.         else vacated rows are filled with the current color
  3895. Notes:    For FGDRIVER v1.10, this function was "FG_SOUNDS" (see AX=009Eh);
  3896.       "FG_SCROLL" was AX=0067h
  3897.     In graphics modes, the left and right edges are adjusted to byte
  3898.       boundaries if necessary
  3899.     Circular scrolling uses part of the hidden page as a workspace
  3900. SeeAlso: AX=0071h,AX=0095h
  3901. --------V-62008A-----------------------------
  3902. INT 62 u - FGDRIVER v3.03 - "FG_SETATTR" - SET TEXT-MODE CHARACTER ATTRIBUTE
  3903.     AX = 008Ah
  3904.     BX = foreground
  3905.     CX = background
  3906.     DX = blink (0000h nonblinking, 0001h blink)
  3907. Notes:    For FGDRIVER v1.10, this function was "FG_VOICE" (see AX=00AAh);
  3908.       "FG_SETATTR" was AX=0019h
  3909.     This call is ignored in graphics modes
  3910. SeeAlso: AX=000Bh,,AX=0030h,AX=0034h
  3911. --------V-62008B-----------------------------
  3912. INT 62 u - FGDRIVER v3.03 - "FG_SETCAPS" - SET STATE OF CAPSLOCK KEY
  3913.     AX = 008Bh
  3914.     BX = new state (0000h off, 0001h on)
  3915. Note:    For FGDRIVER v1.10, this function was "FG_VOICES" (see AX=00ABh);
  3916.       "FG_SETCAPS" was AX=0071h
  3917. SeeAlso: AX=000Ah,AX=006Ch,AX=0088h,AX=0094h
  3918. --------V-62008C-----------------------------
  3919. INT 62 u - FGDRIVER v3.03 - "FG_SETCLIP" - SET CLIPPING REGION
  3920.     AX = 008Ch
  3921.     BX = left edge of clipping region
  3922.     CX = right edge of clipping region
  3923.     DX = top edge of clipping region
  3924.     SI = bottom edge of clipping region
  3925. Note:    For FGDRIVER v1.10, this function was "FG_MUSIC" (see AX=006Ah);
  3926.       "FG_SETCLIP" was AX=0029h
  3927. SeeAlso: AX=000Fh,AX=001Dh,AX=002Ah,AX=0086h,AX=00A5h
  3928. --------V-62008D-----------------------------
  3929. INT 62 u - FGDRIVER v3.03 - "FG_SETCOLOR" - SET CURRENT COLOR
  3930.     AX = 008Dh
  3931.     BX = new color index (or text attribute in text modes)
  3932. Note:    For FGDRIVER v1.10, this function was "FG_MUSICB" (see AX=006Bh);
  3933.       "FG_SETCOLOR" was AX=001Ah
  3934. SeeAlso: AX=0016h,AX=0034h,AX=0039h
  3935. --------V-62008E-----------------------------
  3936. INT 62 u - FGDRIVER v3.03 - "FG_SETDACS" - SET VIDEO DAC CONTENTS
  3937.     AX = 008Eh
  3938.     CX = number of DAC registers to set (0001h to 0100h)
  3939.     DX = starting DAC register number (0000h to 00FFh)
  3940.     ES:BX -> buffer containing DAC red/green/blue triples
  3941. Notes:    For FGDRIVER v1.10, this function was "FG_HUSH" (see AX=0048h);
  3942.       "FG_SETDACS" was AX=00A5h
  3943.     The register number wraps back to zero after reaching FFh
  3944.     This call has no effect in text modes or graphics modes below 11h
  3945. SeeAlso: AX=0035h,AX=0042h,AX=006Fh,INT 10/AX=1012h
  3946. --------V-62008F-----------------------------
  3947. INT 62 u - FGDRIVER v3.03 - "FG_SETENTRY" - SET TYPE AND ADDRESS OF VIDEO PAGE
  3948.     AX = 008Fh
  3949.     BX = page number (00h-3Fh)
  3950.     CX = page address
  3951.     DX = page type (see AX=0036h)
  3952. Notes:    For FGDRIVER v1.10, this function was "FG_HUSHNEXT" (see AX=0049h);
  3953.       "FG_SETENTRY" did not exist yet
  3954. SeeAlso: AX=002Eh,AX=0036h,AX=0093h
  3955. --------V-620090-----------------------------
  3956. INT 62 u - FGDRIVER v3.03 - "FG_SETFUNC" - SET LOGICAL OPERATION FOR VIDEO OPS
  3957.     AX = 0090h
  3958.     BX = operation
  3959.         0000h replacement
  3960.         0001h AND
  3961.         0002h OR
  3962.         0003h XOR
  3963. Notes:    For FGDRIVER v1.10, this function was "FG_QUIET" (see AX=007Fh);
  3964.       "FG_SETFUNC" was AX=009Ch
  3965.     This function is only available in native EGA/VGA graphics modes
  3966.       (0Dh to 12h)
  3967. SeeAlso: AX=001Ch,AX=0076h
  3968. --------V-620091-----------------------------
  3969. INT 62 u - FGDRIVER v3.03 - "FG_SETHPAGE" - SET HIDDEN VIDEO PAGE
  3970.     AX = 0091h
  3971.     BX = new hidden page (0000h to 003Fh)
  3972. Notes:    For FGDRIVER v1.10, this function was "FG_PLAYING" (see AX=0075h);
  3973.       "FG_SETHPAGE" was AX=0041h
  3974.     The specified page must be a physical page or a virtual page
  3975. SeeAlso: AX=0037h,AX=0095h,AX=0098h
  3976. --------V-620092-----------------------------
  3977. INT 62 u - FGDRIVER v3.03 - "FG_SETLINES" - SET TEXT ROWS ON SCREEN
  3978.     AX = 0092h
  3979.     BX = new screen size (25, 43, 50)
  3980. Note:    For FGDRIVER v1.10, this function was "FG_RESUME" (see AX=0084h);
  3981.       "FG_SETLINES" was AX=0011h
  3982. SeeAlso: AX=003Bh
  3983. --------V-620093-----------------------------
  3984. INT 62 u - FGDRIVER v3.03 - "FG_SETMODE" - SELECT VIDEO MODE AND INITIALIZE
  3985.     AX = 0093h
  3986.     BX = new video mode or FFFFh for current mode
  3987.     ES:DX -> WORD ???
  3988. Notes:    For FGDRIVER v1.10, this function was "FG_SUSPEND" (see AX=00A0h);
  3989.       "FG_SETMODE" was AX=0001h
  3990.     This call resets the active video page to page 0000h, the clipping
  3991.       region to the entire screen, text rows to 25, etc.
  3992. SeeAlso: AX=003Fh,INT 10/AH=00h
  3993.  
  3994. Values for video mode:
  3995.  00h-07h standard BIOS modes
  3996.  09h    PCjr/Tandy1000 320x200x16
  3997.  0Bh    Hercules graphics 720x348
  3998.  0Ch    Hercules graphics 320x200
  3999.  0Dh-13h standard BIOS modes
  4000.  14h    VGA graphics 320x200x256
  4001.  15h    VGA graphics 320x400x256
  4002.  16h    VGA graphics 320x240x256
  4003.  17h    VGA graphics 320x480x256
  4004.  18h    SVGA graphics 640x400x256
  4005.  19h    SVGA graphics 640x480x256
  4006.  1Ah    SVGA graphics 800x600x256
  4007.  1Bh    SVGA graphics 1024x768x256
  4008.  1Ch    SVGA graphics 800x600x16
  4009.  1Dh    SVGA graphics 1024x768x16
  4010. --------V-620094-----------------------------
  4011. INT 62 u - FGDRIVER v3.03 - "FG_SETNUM" - SET STATE OF NUMLOCK KEY
  4012.     AX = 0094h
  4013.     BX = new state (0000h off, 0001h on)
  4014. Note:    For FGDRIVER v1.10, this function was unused; "FG_SETNUM" was AX=0073h
  4015. SeeAlso: AX=000Ah,AX=006Ch,AX=0088h,AX=008Bh
  4016. --------V-620095-----------------------------
  4017. INT 62 u - FGDRIVER v3.03 - "FG_SETPAGE" - SET ACTIVE VIDEO PAGE
  4018.     AX = 0095h
  4019.     BX = new video page (0000h to 003Fh)
  4020. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SETPAGE" was AX=003Dh
  4021.     The specified page must be a physical or virtual page
  4022. SeeAlso: AX=002Fh,AX=0036h,AX=0037h,AX=0043h,AX=0071h
  4023. --------V-620096-----------------------------
  4024. INT 62 u - FGDRIVER v3.03 - "FG_SETRGB" - SET VIDEO DAC REGISTER CONTENTS
  4025.     AX = 0096h
  4026.     BX = palette or DAC register number
  4027.     CX = red color component
  4028.     DX = green component
  4029.     SI = blue component
  4030. Notes:    For FGDRIVER v1.10, this function was "FG_WAITFOR" (see AX=00ACh);
  4031.       "FG_SETRGB" was AX=001Bh
  4032.     The register number may be negative for Tandy, PCjr, and 200-line
  4033.       EGA graphics modes to specify an intense color
  4034.     This call has no effect in text, CGA graphics, and Hercules graphics
  4035.       modes
  4036. SeeAlso: AX=0042h
  4037. --------V-620097-----------------------------
  4038. INT 62 u - FGDRIVER v3.03 - UNUSED
  4039.     AX = 0097h
  4040. Return: AX = 0000h
  4041. Note:    For FGDRIVER v1.10, this function was "FG_STALL" (see AX=009Fh)
  4042. --------V-620098-----------------------------
  4043. INT 62 u - FGDRIVER v3.03 - "FG_SETVPAGE" - SET VISIBLE VIDEO PAGE
  4044.     AX = 0098h
  4045.     BX = new video page (0000h to 003Fh)
  4046. Notes:    For FGDRIVER v1.10, this function was "FG_MEASURE" (see AX=005Bh);
  4047.       "FG_SETVPAGE" was AX=003Fh
  4048.     The specified page must be a physical or virtual page
  4049. SeeAlso: AX=0037h,AX=0091h,AX=0095h
  4050. --------V-620099-----------------------------
  4051. INT 62 u - FGDRIVER v3.03 - UNUSED
  4052.     AX = 0099h
  4053. Return: AX destroyed
  4054. Note:    For FGDRIVER v1.10, this function was "FG_GETCLOCK" (see AX=0033h)
  4055. --------V-62009A-----------------------------
  4056. INT 62 u - FGDRIVER v3.03 - "FG_SHOWPCX" - DISPLAY IMAGE FROM PCX FILE
  4057.     AX = 009Ah
  4058.     ES:BX -> ASCIZ filename of PCX image
  4059.     CX = flags (see below)
  4060. Return: AX = status
  4061.         0000h success
  4062.         0001h file not found
  4063.         0002h not a PCX file
  4064. Notes:    For FGDRIVER v1.10, this function was unused; "FG_SHOWPCX" did not
  4065.       exist yet
  4066.     This function is ignored in text modes and Hercules low-res graphics
  4067. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=0060h"1.10",AX=009Bh,AX=009Ch
  4068.  
  4069. Bitfields for flags:
  4070.  bit 0    use current palette rather than PCX file's palette
  4071.  bit 1    display image at cursor position instead of position in PCX header
  4072.  bits 2-15 reserved
  4073. --------V-62009B-----------------------------
  4074. INT 62 u - FGDRIVER v3.03 - "FG_SHOWPPR" - DISPLAY IMAGE FROM PPR FILE
  4075.     AX = 009Bh
  4076.     ES:BX -> ASCIZ filename of packed pixel run image
  4077.     CX = width in pixels (nonzero)
  4078. Return: AX = status
  4079.         0000h successful
  4080.         0001h file not found
  4081. Notes:    For FGDRIVER v1.10, this function was "FG_MEMAVAIL" (see AX=005Ch);
  4082.       "FG_SHOWPPR" did not exist yet
  4083.     The image is displayed with its lower left corner at the current
  4084.       graphics cursor position
  4085.     This function is ignored in text modes and 256-color graphics modes
  4086. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Ch
  4087. --------V-62009C-----------------------------
  4088. INT 62 u - FGDRIVER v3.03 - "FG_SHOWSPR" - DISPLAY IMAGE FROM SPR FILE
  4089.     AX = 009Ch
  4090.     ES:BX -> ASCIZ filename of standard pixel run image
  4091.     CX = width in pixels (nonzero)
  4092. Return: AX = status
  4093.         0000h successful
  4094.         0001h file not found
  4095. Notes:    For FGDRIVER v1.10, this function was "FG_SETFUNC" (see AX=0090h);
  4096.       "FG_SHOWSPR" did not exist yet
  4097.     The image is displayed with its lower left corner at the current
  4098.       graphics cursor position
  4099.     This function is ignored in text modes
  4100. SeeAlso: AX=004Ah,AX=0057h,AX=0058h,AX=0059h,AX=009Ah,AX=009Bh
  4101. --------V-62009D-----------------------------
  4102. INT 62 u - FGDRIVER v3.03 - "FG_SOUND" - MAKE SOUND FOR SPECIFIED DURATION
  4103.     AX = 009Dh
  4104.     BX = frequency in Hertz (18-32767)
  4105.     CX = duration in clock ticks (0000h or negative for continuous sound)
  4106. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCCMS" (see AX=0001h);
  4107.       "FG_SOUND" was AX=0088h
  4108.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  4109.       AX=008Dh) is already in progress
  4110. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00A0h,AX=00AAh
  4111. --------V-62009E-----------------------------
  4112. INT 62 u - FGDRIVER v3.03 - "FG_SOUNDS" - PLAY SOUNDS IN BACKGROUND
  4113.     AX = 009Eh
  4114.     CX = number of times to cycle through sound list
  4115.     ES:BX -> sounds array (see below)
  4116. Notes:    For FGDRIVER v1.10, this function was "FG_ALLOCEMS" (see AX=0002h);
  4117.       "FG_SOUNDS" was AX=0089h
  4118.     This call is ignored if asynchronous sound (AX=0089h,AX=008Bh,
  4119.       AX=008Dh) is already in progress
  4120. SeeAlso: AX=0048h,AX=006Bh,AX=009Dh,AX=00A0h,AX=00ABh
  4121.  
  4122. Format of sounds array element:
  4123. Offset    Size    Description
  4124.  00h    WORD    frequency of sound in Hertz (0000h ends array)
  4125.  02h    WORD    duration of sound in clock ticks
  4126. --------V-62009F-----------------------------
  4127. INT 62 u - FGDRIVER v3.03 - "FG_STALL" - PAUSE FOR SPECIFIED DURATION
  4128.     AX = 009Fh
  4129.     BX = duration in processor-dependent delay units (see AX=0098h)
  4130. Return: after delay elapses
  4131. Note:    For FGDRIVER v1.10, this function was "FG_ALLOCXMS" (see AX=0003h);
  4132.       "FG_STALL" was AX=0097h
  4133. SeeAlso: AX=005Bh,INT 2F/AX=1224h
  4134. --------V-6200A0-----------------------------
  4135. INT 62 u - FGDRIVER v3.03 - "FG_SUSPEND" - TEMPORARILY STOP ASYNCHRONOUS SOUND
  4136.     AX = 00A0h
  4137. Notes:    For FGDRIVER v1.10, this function was "FG_INITEMS" (see AX=004Ch);
  4138.       "FG_SUSPEND" was AX=0093h
  4139.     This call has no effect if there is no asynchronous sound in progress
  4140.     The program must not exit while sound is suspended
  4141. SeeAlso: AX=0048h,AX=006Ah,AX=009Eh,AX=00A0h,AX=00AAh
  4142. --------V-6200A1-----------------------------
  4143. INT 62 u - FGDRIVER v3.03 - "FG_SVGAINIT" - INITIALIZE FASTGRAPH SVGA KERNEL
  4144.     AX = 00A1h
  4145.     BX = method (see below)
  4146. Return: AX = status
  4147.         0000h no VESA BIOS or supported SVGA chipset
  4148.         0001h using VESA BIOS
  4149.         0002h-0016h specific chipset being used (same as "method" below)
  4150. Notes:    For FGDRIVER v1.10, this function was "FG_INITXMS" (see AX=004Eh);
  4151.       "FG_SVGAINIT" did not exist yet
  4152.     This function must be called before attempting to set SVGA graphics
  4153.       modes (18h to 1Dh) or using "FG_BESTMODE", "FG_TESTMODE", or
  4154.       "FG_MEMORY"
  4155. SeeAlso: AX=0023h,AX=00A2h,AX=00A3h
  4156.  
  4157. Values for method:
  4158.  0000h    autodetect, give chipset-specific code priority over VESA
  4159.  0001h    autodetect, give VESA priority over chipset-specific code
  4160.  0002h    Ahead type "A"
  4161.  0003h    Ahead type "B"
  4162.  0004h    ATI 18800
  4163.  0005h    ATI 18800-1
  4164.  0006h    ATI 28800
  4165.  0007h    Chips & Technologies 82c451/455/456
  4166.  0008h    C&T 82c452
  4167.  0009h    C&T 82c453
  4168.  000Ah    Genoa 6000 series
  4169.  000Bh    Oak OTI-067
  4170.  000Ch    Paradise PVGA1a
  4171.  000Dh    Paradise WD90C00/WD90C10
  4172.  000Eh    Paradise WD90C11/WD90C30/WD90C31
  4173.  000Fh    Trident 8800
  4174.  0010h    Trident 8900
  4175.  0011h    Tseng ET3000
  4176.  0012h    Tseng ET4000
  4177.  0013h    Video7
  4178.  0014h    Cirrus Logic 5400 series
  4179.  0015h    S3
  4180.  0016h    Trident 8900B/8900C/9000
  4181. --------V-6200A2-----------------------------
  4182. INT 62 u - FGDRIVER v3.03 - "FG_SVGASTAT" - GET SVGA CHIPSET INFORMATION
  4183.     AX = 00A2h
  4184. Return: AX = chipset information (see below)
  4185. Note:    For FGDRIVER v1.10, this function was "FG_BOX" (see AX=0006h);
  4186.       "FG_SVGASTAT" did not exist yet
  4187. SeeAlso: AX=0023h,AX=00A1h,AX=00A3h
  4188.  
  4189. Bitfields for chipset information:
  4190.  bit 0    SVGA kernel initialized
  4191.  bit 1    VESA support enabled
  4192.  bit 2    extended video pages available in modes 13-23
  4193.  bit 3    SVGA chipset has separate read and write banks
  4194.  bits 4-15 reserved (0)
  4195. --------V-6200A3-----------------------------
  4196. INT 62 u - FGDRIVER v3.03 - "FG_SVGAVER" - GET FASTGRAPH SVGA KERNEL VERSION
  4197.     AX = 00A3h
  4198.     ES:BX -> variable pointer record (see below)
  4199. Note:    For FGDRIVER v1.10, this function was "FG_BOXDEPTH" (see AX=0007h);
  4200.       "FG_SVGAVER" did not exist yet
  4201. SeeAlso: AX=00A1h,AX=00A2h
  4202.  
  4203. Format of variable pointer record:
  4204. Offset    Size    Description
  4205.  00h    WORD    segment of WORD buffer for major version
  4206.  02h    WORD    offset of WORD buffer for major version
  4207.  04h    WORD    segment of WORD buffer for minor version (hundredths)
  4208.  06h    WORD    offset of WORD buffer for minor version
  4209. --------V-6200A4-----------------------------
  4210. INT 62 u - FGDRIVER v3.03 - "FG_TCDEFINE" - DEFINE TRANSPARENCY OF COLOR INDEX
  4211.     AX = 00A4h
  4212.     BX = color index
  4213.     CX = transparency (00h opaque, other transparent)
  4214. Notes:    For FGDRIVER v1.10, this function was "FG_GETDACS" (see AX=0035h);
  4215.       "FG_TCDEFINE" did not exist yet
  4216.     This function is ignored in text modes
  4217. SeeAlso: AX=00A5h,AX=00A6h
  4218. --------V-6200A5-----------------------------
  4219. INT 62 u - FGDRIVER v3.03 - "FG_TCMASK" - SET TRANSPARENT COLORS
  4220.     AX = 00A5h
  4221.     BX = colors to consider transparent (bit 0 = color 0, etc)
  4222. Notes:    For FGDRIVER v1.10, this function was "FG_SETDACS" (see AX=008Eh);
  4223.       "FG_TCMASK" was AX=005Eh
  4224.     This call is ignored in text modes
  4225.     The specified colors are considered transparent by "FG_TCXFER"
  4226. SeeAlso: AX=00A4h,AX=00A6h
  4227. --------V-6200A6-----------------------------
  4228. INT 62 u - FGDRIVER v3.03 - "FG_TCXFER" - COPY REGION EXCLUDING TRANSPARENT
  4229.     AX = 00A6h
  4230.     CX = source video page
  4231.     DX = destination video page
  4232.     ES:BX -> copy record (see below)
  4233. Notes:    For FGDRIVER v1.10, this function was unused; "FG_TCXFER" was AX=005Dh
  4234.     Pixels which are in any of the colors defined as transparent with
  4235.       "FG_TCMASK" (see AX=00A5h) are left unchanged in the destination
  4236.       region
  4237.     The source and destination regions must not overlap if they are located
  4238.       on the same page
  4239.     This call is ignored in text modes
  4240. SeeAlso: AX=00A4h,AX=00A5h,AX=00A9h
  4241.  
  4242. Format of copy record:
  4243. Offset    Size    Description
  4244.  00h    WORD    left edge column of source region
  4245.  02h    WORD    right edge column of source region
  4246.  04h    WORD    top edge row of source region
  4247.  06h    WORD    bottom edge row of source region
  4248.  08h    WORD    left edge of destination
  4249.  0Ah    WORD    bottom edge of destination
  4250. --------V-6200A7-----------------------------
  4251. INT 62 u - FGDRIVER v3.03 - "FG_TESTMODE" - CHECK IF VIDEO MODE AVAILABLE
  4252.     AX = 00A7h
  4253.     BX = desired video mode (00h-17h, also 18h-1Dh after "FG_SVGAINIT")
  4254.     CX = required number of video pages (ignore memory size if <= 0)
  4255. Return: AX = status
  4256.         0000h mode not available with requested number of pages
  4257.         0001h mode is available
  4258. Note:    For FGDRIVER v1.10, this function was unused;"FG_TESTMODE" was AX=0002h
  4259. SeeAlso: AX=0005h,AX=0093h
  4260. --------V-6200A8-----------------------------
  4261. INT 62 u - FGDRIVER v3.03 - "FG_TEXT" - DISPLAY STRING OF CHARACTERS
  4262.     AX = 00A8h
  4263.     CX = length of string
  4264.     ES:BX -> string
  4265. Notes:    For FGDRIVER v1.10, this function was unused; "FG_TEXT" was AX=0032h
  4266.     The string is displayed starting at the text cursor position using the
  4267.       current text attribute (text modes) or color index (graphics modes)
  4268.     The text cursor position is updated after this call
  4269. SeeAlso: AX=000Ch,AX=007Ch
  4270. --------V-6200A9-----------------------------
  4271. INT 62 u - FGDRIVER v3.03 - "FG_TRANSFER" - COPY REGION
  4272.     AX = 00A9h
  4273.     CX = source video page
  4274.     DX = destination video page
  4275.     ES:BX -> copy record (see below)
  4276. Notes:    For FGDRIVER v1.10, this function was unused;"FG_TRANSFER" was AX=005Ch
  4277.     The source and destination regions must not overlap if they are located
  4278.       on the same page
  4279. SeeAlso: AX=0083h,AX=0087h,AX=0089h,AX=00A6h
  4280.  
  4281. Format of copy record:
  4282. Offset    Size    Description
  4283.  00h    WORD    left edge column of source region
  4284.  02h    WORD    right edge column of source region
  4285.  04h    WORD    top edge row of source region
  4286.  06h    WORD    bottom edge row of source region
  4287.  08h    WORD    left edge of destination
  4288.  0Ah    WORD    bottom edge of destination
  4289. --------V-6200AA-----------------------------
  4290. INT 62 u - FGDRIVER v3.03 - "FG_VOICE" - START SOUND
  4291.     AX = 00AAh
  4292.     BX = channel on TI sound chip
  4293.         1-3 = channels 1-3, 4 = channel 4 with periodic noise,
  4294.         5 = channel 4 with white noise
  4295.     CX = frequency in Hz (18-32767 for channels 1-3; 0=512 Hz, 1=1024 Hz,
  4296.         2=2048 Hz for channels 4 and 5)
  4297.     DX = volume
  4298.     SI = duration in clock ticks (continuous if <= 0)
  4299. Program: FGDRIVER is the external video driver for the shareware
  4300.       Fastgraph/Light by Ted Gruber Software
  4301. Notes:    For FGDRIVER v1.10, this function was unused; "FG_VOICE" was AX=008Ah
  4302.     This function is only available on the PCjr and Tandy 1000 machines
  4303. SeeAlso: AX=006Ah,AX=009Dh,AX=00ABh
  4304. --------V-6200AB-----------------------------
  4305. INT 62 u - FGDRIVER v3.03 - "FG_VOICES" - PLAY SOUNDS IN BACKGROUND
  4306.     AX = 00ABh
  4307.     ES:BX -> tone array (see below)
  4308.     CX = number of times to repeat tone array
  4309. Notes:    For FGDRIVER v1.10, this function was unused; "FG_VOICES" was AX=008Bh
  4310.     This function is only available on the PCjr and Tandy 1000 machines
  4311. SeeAlso: AX=0048h,AX=006Bh,AX=009Eh,AX=00AAh
  4312.  
  4313. Format of tone array element:
  4314. Offset    Size    Description
  4315.  00h    WORD    channel number (0000h terminates array)
  4316.  02h    WORD    frequency
  4317.  04h    WORD    volume
  4318.  06h    WORD    duration in 1/72.8 seconds
  4319. --------V-6200AC-----------------------------
  4320. INT 62 u - FGDRIVER v3.03 - "FG_WAITFOR" - DELAY FOR SPECIFIED DURATION
  4321.     AX = 00ACh
  4322.     BX = duration in clock ticks
  4323. Return: after delay elapses
  4324. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITFOR" was AX=0096h
  4325. SeeAlso: AX=009Fh,INT 1A/AX=FF01h
  4326. --------V-6200AD-----------------------------
  4327. INT 62 u - FGDRIVER v3.03 - "FG_WAITKEY" - FLUSH KEYBOARD BUFFER AND AWAIT KEY
  4328.     AX = 00ADh
  4329. Return: after next key pressed
  4330. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITKEY" was AX=006Dh
  4331. SeeAlso: AX=000Ah,AX=003Ah,AX=0051h,AX=0054h,INT 16/AH=00h
  4332. --------V-6200AE-----------------------------
  4333. INT 62 u - FGDRIVER v3.03 - "FG_WAITVR" - ENABLE/DISABLE VERTICAL RETRACE WAIT
  4334.     AX = 00AEh
  4335.     BX = new state (0000h disabled, 0001h enabled)
  4336. Note:    For FGDRIVER v1.10, this function was unused; "FG_WAITVR" did not
  4337.       exist yet
  4338. --------V-6200AF-----------------------------
  4339. INT 62 u - FGDRIVER v3.03 - "FG_WHERE" - GET CURRENT CURSOR POSITION
  4340.     AX = 00AFh
  4341.     ES:BX -> variable pointers (see below)
  4342. Return: indicated variables filled with cursor row and column for active
  4343.       display
  4344. Note:    For FGDRIVER v1.10, this function was unused; "FG_WHERE" was AX=0034h
  4345. SeeAlso: AX=0045h,AX=0047h,AX=0055h,AX=0068h
  4346.  
  4347. Format of variable pointers:
  4348. Offset    Size    Description
  4349.  00h    WORD    segment of WORD buffer for cursor row
  4350.  02h    WORD    offset of WORD buffer for cursor row
  4351.  04h    WORD    segment WORD buffer for cursor column
  4352.  06h    WORD    offset WORD buffer for cursor column
  4353. --------V-6200B0-----------------------------
  4354. INT 62 u - FGDRIVER v3.03 - "FG_XALPHA" - CONVERT SCREEN COLUMN TO CHAR COLUMN
  4355.     AX = 00B0h
  4356.     BX = screen space column
  4357. Return: AX = character space column containing specified coordinate
  4358. Note:    For FGDRIVER v1.10, this function was unused; "FG_XALPHA" was AX=000Ch
  4359. SeeAlso: AX=00B1h,AX=00B2h
  4360. --------V-6200B1-----------------------------
  4361. INT 62 u - FGDRIVER v3.03 - "FG_XCONVERT" - CONVERT CHAR COLUMN TO SCREEN COL
  4362.     AX = 00B1h
  4363.     BX = character space column
  4364. Return: AX = screen space column of leftmost pixel in specified character col
  4365. Note:    For FGDRIVER v1.10, this function was unused;"FG_XCONVERT" was AX=000Eh
  4366. SeeAlso: AX=00B0h,AX=00B3h
  4367. --------V-6200B2-----------------------------
  4368. INT 62 u - FGDRIVER v3.03 - "FG_YALPHA" - CONVERT SCREEN ROW TO CHARACTER ROW
  4369.     AX = 00B2h
  4370.     BX = screen space row
  4371. Return: AX = character space row containing specified coordinate
  4372. Note:    For FGDRIVER v1.10, this function was unused; "FG_YALPHA" was AX=000Dh
  4373. SeeAlso: AX=00B0h,AX=00B3h
  4374. --------V-6200B3-----------------------------
  4375. INT 62 u - FGDRIVER v3.03 - "FG_YCONVERT" - CONVERT CHARACTER ROW TO SCREEN ROW
  4376.     AX = 00B3h
  4377.     BX = character space row
  4378. Return: AX = screen space row of topmost pixel in specified character row
  4379. Program: FGDRIVER is the external video driver for the shareware
  4380.       Fastgraph/Light by Ted Gruber Software
  4381. Note:    For FGDRIVER v1.10, this function was unused;"FG_YCONVERT" was AX=000Fh
  4382. SeeAlso: AX=00B1h,AX=00B2h
  4383. --------T-6201-------------------------------
  4384. INT 62 - Cswitch - GIVE UP REST OF TIME-SLICE
  4385.     AH = 01h
  4386. Program: Cswitch is a set of multitasking functions by Herb Rose
  4387. SeeAlso: AH=05h,AH=06h,INT 15/AX=1000h,INT 2F/AX=1680h
  4388. --------T-6202-------------------------------
  4389. INT 62 - Cswitch - WAIT FOR SEMAPHORE
  4390.     AH = 02h
  4391.     DX = semaphore number (0-63)
  4392. Return: AX = FFFFh bad semaphore number
  4393.          else  success
  4394. SeeAlso: AH=03h,AH=04h
  4395. --------T-6203-------------------------------
  4396. INT 62 - Cswitch - CHECK SEMAPHORE
  4397.     AH = 03h
  4398.     DX = semaphore number (0-63)
  4399. Return: AX = FFFFh not owned
  4400.          else  owned
  4401. SeeAlso: AH=02h,AH=04h
  4402. --------T-6204-------------------------------
  4403. INT 62 - Cswitch - TRIGGER SEMAPHORE
  4404.     AH = 04h
  4405.     DX = semaphore number (0-63)
  4406. Return: AX = FFFFh bad semaphore number
  4407.          else  success
  4408. SeeAlso: AH=02h,AH=03h
  4409. --------T-6205-------------------------------
  4410. INT 62 - Cswitch - SLEEP
  4411.     AH = 05h
  4412.     BX = seconds to sleep
  4413. SeeAlso: AH=01h,AH=06h,AH=08h"Cswitch"
  4414. --------T-6206-------------------------------
  4415. INT 62 - Cswitch - SUSPEND
  4416.     AH = 06h
  4417. SeeAlso: AH=05h,AH=08h"Cswitch"
  4418. --------T-6207-------------------------------
  4419. INT 62 - Cswitch - SPAWN
  4420.     AH = 07h
  4421.     ES:BX -> function address to start executing at
  4422.     CX = priority (1-10)
  4423. Return: AX = FFFDh  no free memory control blocks
  4424.        = FFFEh  no free task control blocks
  4425.        = FFFFh  not enough memory to create new task stack
  4426.        = >0        the tcb number of the new task, indicating no error
  4427. SeeAlso: AH=0Fh,AH=10h
  4428. --------T-6208-------------------------------
  4429. INT 62 - Cswitch - WAKE UP TASK
  4430.     AH = 08h
  4431.     BX = tcb identifier
  4432. SeeAlso: AH=05h,AH=06h
  4433. ----------6208--CXFFFE-----------------------
  4434. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - UNINSTALL/GET PSP ADDR
  4435.     AH = 08h
  4436.     CX = FFFEh
  4437.     DX = FFFFh
  4438. Return: AX = PSP address of resident DBLIBRARY
  4439. Note:    this call does not free the memory allocated to the TSR; the calling
  4440.       code must do the deallocation.
  4441. SeeAlso: INT 62"DBLIBRARY"
  4442. --------T-6209-------------------------------
  4443. INT 62 - Cswitch - SET PRIORITY
  4444.     AH = 09h
  4445.     BX = new base priority (1-10)
  4446. Note:    the lower the priority is numerically, the more often the task will run
  4447. --------T-620A-------------------------------
  4448. INT 62 - Cswitch - TEST MESSAGE QUEUE
  4449.     AH = 0Ah
  4450.     DX = queue number (0-63)
  4451. Return: AX = FFFFh bad queue number
  4452.        = 0000h nothing on queue
  4453.          else  number of bytes in first message in queue
  4454. SeeAlso: AH=0Bh,AH=0Ch
  4455. --------T-620B-------------------------------
  4456. INT 62 - Cswitch - SEND MESSAGE
  4457.     AH = 0Bh
  4458.     CX = number of bytes to write
  4459.     DS:SI -> buffer
  4460.     DX = queue number (0-63)
  4461. Return: AX = FFFEh triggered by something arriving, redo the call
  4462.        = FFFFh bad queue number
  4463.        = 0000h no message was on queue
  4464.          else  number of bytes in message
  4465. SeeAlso: AH=0Ah,AH=0Ch
  4466. --------T-620C-------------------------------
  4467. INT 62 - Cswitch - READ MESSAGE
  4468.     AH = 0Ch
  4469.     CX = number of bytes to read
  4470.     DS:SI -> buffer
  4471.     DX = queue number (0-63)
  4472. Return: AX = FFFFh bad queue number
  4473.          else  number of bytes transferred
  4474. SeeAlso: AH=0Ah,AH=0Bh
  4475. --------T-620D-------------------------------
  4476. INT 62 - Cswitch - DON'T ALLOW TASK TO BE SWAPPED OUT
  4477.     AH = 0Dh
  4478. SeeAlso: AH=0Eh
  4479. --------T-620E-------------------------------
  4480. INT 62 - Cswitch - ALLOW TASK TO BE SWAPPED OUT
  4481.     AH = 0Eh
  4482. SeeAlso: AH=0Dh
  4483. --------T-620F-------------------------------
  4484. INT 62 - Cswitch - LOAD AND RUN PROGRAM FROM DISK
  4485.     AH = 0Fh
  4486.     ES:BX -> command line
  4487.     CX = priority (1-10)
  4488.     DX = background flag (nonzero allows loading to EMS)
  4489. Return: AX = 0000h task loader queue is full
  4490.        = 0001h  no error
  4491. SeeAlso: AH=07h,AH=10h,AH=13h
  4492. --------T-6210-------------------------------
  4493. INT 62 - Cswitch - TERMINATE SPAWNED PROGRAM
  4494.     AH = 10h
  4495. SeeAlso: AH=07h,AH=0Fh
  4496. --------T-6211-------------------------------
  4497. INT 62 - Cswitch - GET TCB INFORMATION
  4498.     AH = 11h
  4499.     ES:BX -> a pointer which will be set to the tcb address
  4500. Return: AX = tcb indentifier
  4501. SeeAlso: AH=12h
  4502. --------T-6212-------------------------------
  4503. INT 62 - Cswitch - GET TCB ADDRESS
  4504.     AH = 12h
  4505.     ES:BX -> a pointer which will be set to the tcb table address
  4506. Return: AX = tcb indentifier
  4507. SeeAlso: AH=11h
  4508. --------T-6213-------------------------------
  4509. INT 62 - Cswitch - CHECK STATUS OF PREVIOUS LOAD_TASK
  4510.     AH = 13h
  4511. Return: AX = FFFCh no Memory Control Blocks available
  4512.        = FFFDh no TCBs available
  4513.        = FFFEh insufficient memory
  4514.        = FFFFh cannot open file
  4515.        = 0000h load in progress (not done yet)
  4516.          else  tcb indentifier
  4517. SeeAlso: AH=0Fh
  4518. --------R-6247-------------------------------
  4519. INT 62 - PC Tools v7 COMMUTE - ???
  4520.     AH = 47h
  4521.     AL = subfunction (00h-31h)
  4522.     ???
  4523.     CF set
  4524. Return: ???
  4525. --------R-6248-------------------------------
  4526. INT 62 - PC Tools v7 COMMUTE - ???
  4527.     AH = 48h
  4528.     AL = ???
  4529.     ???
  4530.     CF set
  4531. Return: ???
  4532. --------R-6249-------------------------------
  4533. INT 62 - PC Tools v7 COMMUTE - ???
  4534.     AH = 49h
  4535.     ???
  4536.     CF set
  4537. Return: ???
  4538. Note:    may be the same as AH=4Ch
  4539. --------R-624A-------------------------------
  4540. INT 62 - PC Tools v7 COMMUTE - ???
  4541.     AH = 4Ah
  4542.     AL = subfunction (00h-46h)
  4543.     ???
  4544.     CF set
  4545. Return: ???
  4546. --------R-624B--BX1234-----------------------
  4547. INT 62 - PC Tools v7 COMMUTE - ???
  4548.     AH = 4Bh
  4549.     BX = 1234h
  4550.     CX = 1234h
  4551.     ES = ???
  4552.     CF set
  4553. Return: ???
  4554. --------R-624C-------------------------------
  4555. INT 62 - PC Tools v7 COMMUTE - ???
  4556.     AH = 4Ch
  4557.     BL = subfunction
  4558.         00h ???
  4559.         02h ???
  4560. Return: CF clear if successful
  4561.     CF set on error
  4562. --------R-626262-----------------------------
  4563. INT 62 - PC Tools v7 COMMUTE - INSTALLATION CHECK
  4564.     AX = 6262h
  4565.     CF set
  4566. Return: AX = 0000h
  4567.     BX = segment of resident code's PSP
  4568. --------N-62FE-------------------------------
  4569. INT 62 - BW-TCP - ETHDRV.SYS - MAP EMS PAGE FRAME
  4570.     AH = FEh
  4571.     AL = direction
  4572.         00h map in driver's memory block
  4573.         01h map out driver's memory block
  4574. Return: CF clear if successful
  4575.     CF set on error
  4576.         AL = error code
  4577. Note:    this function is supported by at least the SLIP and ODI versions of
  4578.       ETHDEV.SYS
  4579. SeeAlso: INT 21/AH=3Fh"BW-TCP",INT 62"BW-TCP",INT 63"BW-TCP",INT 64/AH=FEh
  4580. --------*-63---------------------------------
  4581. INT 63 - reserved for user interrupt
  4582. --------d-63---------------------------------
  4583. INT 63 - Adaptec and OMTI controllers - DRIVE 0 DATA
  4584. Notes:    this vector stores the last four bytes of the parameter table for
  4585.       hard disk 0
  4586. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 62"Adaptec",INT 64"Adaptec"
  4587. ----------63---------------------------------
  4588. INT 63 - Oracle SQL Protected Mode Executive - ???
  4589. --------d-63---------------------------------
  4590. INT 63 - 4+Power FLOPPY CONTROLLER - ORIGINAL INT 13/40
  4591.    the "4+Power" quad floppy controller BIOS hooks INT 13 (or INT 40 if INT 13
  4592.    has been moved there) and places the old value here
  4593. ----------63---------------------------------
  4594. INT 63 - Kofax KF9X00 image manipulation card interface
  4595. --------Q-63---------------------------------
  4596. INT 63 - DESQview/X - SOCKET API
  4597. Notes:    parameters are passed by patching!! data field immediately following
  4598.       the entry point, as detailed below; the preferred method for calling
  4599.       the socket API is via INT 15/AX=DE2Eh
  4600.     the installation check consists of testing for the string "dvxunix"
  4601.       (yes, lowercase) at offset 9 from the interrupt handler start
  4602. SeeAlso: INT 15/AX=DE2Eh,INT BE"DESQview"
  4603. Index:    installation check;DESQview/X socket interface
  4604.  
  4605. Format of interrupt handler entry:
  4606. Offset    Size    Description
  4607.  00h  3 BYTEs    near jump or short jump + NOP to actual interrupt handler
  4608.  03h    WORD    offset from following pointer for initial top of local stack
  4609.  05h    DWORD    pointer to argument/stack block (see INT 15/AX=DE2Eh)
  4610.  09h  7 BYTEs    signature "dvxunix"
  4611. --------b-6300-------------------------------
  4612. INT 63 - HP 100LX - MAP HIGH MEMORY
  4613.     AH = 00h
  4614.     AL = physical page (00h seg C000, 01h seg C400h, ...)
  4615.     BX = zero-based logical page
  4616.     CX = page number
  4617.     DX = device ID (00h system ROM, 05h plugin, etc.)
  4618. Return: ???
  4619. SeeAlso: AH=01h
  4620. --------N-6300-------------------------------
  4621. INT 63 - BW-TCP - TCPIP.SYS - SET IP ADDRESS???
  4622.     AH = 00h
  4623.     DS:BX -> DWORD containing IP address (big-endian)
  4624. Return: CF clear if successful
  4625.     CF set on error
  4626.     AX destroyed
  4627. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4628.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4629.       consecutive interrupt (64h by default) if it is loaded
  4630. SeeAlso: AH=01h"BW-TCP",AH=02h"BW-TCP"
  4631. --------b-6301-------------------------------
  4632. INT 63 - HP 100LX - SAVE/RESTORE MEMORY MAP
  4633.     AH = 01h
  4634.     AL = function (00h save, 01h restore)
  4635.     ???
  4636. Return: ???
  4637. --------N-6301-------------------------------
  4638. INT 63 - BW-TCP - TCPIP.SYS - ???
  4639.     AH = 01h
  4640.     ES:BX -> ???
  4641.     ???
  4642. Return: ???
  4643. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4644.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4645.       consecutive interrupt (64h by default) if it is loaded
  4646. SeeAlso: AH=00h"BW-TCP",AH=02h"BW-TCP"
  4647. --------N-6302-------------------------------
  4648. INT 63 - BW-TCP - TCPIP.SYS - ???
  4649.     AH = 02h
  4650.     ???
  4651. Return: ???
  4652. SeeAlso: AH=00h"BW-TCP",AH=01h"BW-TCP"
  4653. --------N-6303-------------------------------
  4654. INT 63 - BW-TCP - TCPIP.SYS - GET IP ADDRESS
  4655.     AH = 03h
  4656.     DS:SI -> buffer for DWORD IP address (big-endian)
  4657. Return: AX destroyed
  4658.     CF clear if successful
  4659.     CF set on error
  4660. Note:    this call may use ARP or RARP to determine the address
  4661. --------N-6304-------------------------------
  4662. INT 63 - BW-TCP - TCPIP.SYS - ???
  4663.     AH = 04h
  4664.     ???
  4665. Return: ???
  4666. --------N-6305-------------------------------
  4667. INT 63 - BW-TCP - TCPIP.SYS - ???
  4668.     AH = 05h
  4669.     DS:BX -> ???
  4670.     ES:SI -> ???
  4671. Return: ???
  4672. --------N-6306-------------------------------
  4673. INT 63 - BW-TCP - TCPIP.SYS - ???
  4674.     AH = 06h
  4675.     ???
  4676. Return: ???
  4677. --------N-6307-------------------------------
  4678. INT 63 - BW-TCP - TCPIP.SYS - ???
  4679.     AH = 07h
  4680.     ???
  4681. Return: ???
  4682. --------N-6308-------------------------------
  4683. INT 63 - BW-TCP - TCPIP.SYS - SET DEFAULT ??? HANDLER
  4684.     AH = 08h
  4685.     DS:BX -> DWORD containing IP address
  4686. Return: CF clear if successful
  4687.     CF set on error
  4688.     ???
  4689. --------N-6309-------------------------------
  4690. INT 63 - BW-TCP - TCPIP.SYS - INSTALL ??? HANDLERS
  4691.     AH = 09h
  4692.     BL = handler type
  4693.     ES:SI -> FAR handler of specified type
  4694. Return: ???
  4695. SeeAlso: AH=0Ah,AH=0Dh
  4696. --------N-630A-------------------------------
  4697. INT 63 - BW-TCP - TCPIP.SYS - DELETE ??? HANDLERS
  4698.     AH = 0Ah
  4699.     BL = handler type
  4700. Return: CF clear if successful
  4701.     CF set on error (no handler of specified type installed)
  4702. SeeAlso: AH=09h
  4703. --------N-630B-------------------------------
  4704. INT 63 - BW-TCP - TCPIP.SYS - ???
  4705.     AH = 0Bh
  4706.     AL = ???
  4707.     DL = ???
  4708.     DS:BX -> ???
  4709.     ES:SI -> ???
  4710. Return: ???
  4711. --------N-630C-------------------------------
  4712. INT 63 - BW-TCP - TCPIP.SYS - ???
  4713.     AH = 0Ch
  4714.     ???
  4715. Return: ???
  4716. --------N-630D-------------------------------
  4717. INT 63 - BW-TCP - TCPIP.SYS - INSTALL DEFAULT ??? HANDLER
  4718.     AH = 0Dh
  4719.     ???
  4720. Return: ???
  4721. Note:    if not already installed, installs a type 06h handler with AH=09h
  4722. SeeAlso: AH=09h
  4723. --------N-630E-------------------------------
  4724. INT 63 - BW-TCP - TCPIP.SYS - CLOSE NETWORK DESCRIPTOR
  4725.     AH = 0Eh
  4726.     ???
  4727. Return: ???
  4728. SeeAlso: INT 61/AH=08h"PC/TCP",INT 61/AH=09h"PC/TCP",INT 61/AH=18h
  4729. --------N-630F-------------------------------
  4730. INT 63 - BW-TCP - TCPIP.SYS - ???
  4731.     AH = 0Fh
  4732.     AL = ???
  4733.     SI = ???
  4734.     DS:DI -> ???
  4735.     ???
  4736. Return: ???
  4737. --------N-6310-------------------------------
  4738. INT 63 - BW-TCP - TCPIP.SYS - ???
  4739.     AH = 10h
  4740.     DS:DI -> ???
  4741.     ???
  4742. Return: ???
  4743. --------N-6311-------------------------------
  4744. INT 63 - BW-TCP - TCPIP.SYS - ???
  4745.     AH = 11h
  4746.     ???
  4747. Return: ???
  4748. --------N-6312-------------------------------
  4749. INT 63 - BW-TCP - TCPIP.SYS - LISTEN FOR INCOMING CONNECTIONS
  4750.     AH = 12h
  4751.     DS:SI -> ???
  4752.     ES:BP -> ???
  4753. Return: ???
  4754. SeeAlso: INT 61/AH=23h
  4755. --------N-6313-------------------------------
  4756. INT 63 - BW-TCP - TCPIP.SYS - NOP
  4757.     AH = 13h
  4758. Return: nothing
  4759. --------N-6314-------------------------------
  4760. INT 63 - BW-TCP - TCPIP.SYS - OPEN NETWORK CONNECTION
  4761.     AH = 14h
  4762.     BX = network descriptor???
  4763.     DS:SI -> ???
  4764.     ES:BP -> ???
  4765. Return: ???
  4766. SeeAlso: INT 61/AH=13h"PC/TCP",INT 62/AH=13h"ETHDEV"
  4767. --------N-6315-------------------------------
  4768. INT 63 - BW-TCP - TCPIP.SYS - ???
  4769.     AH = 15h
  4770.     DS:DI -> ???
  4771.     ???
  4772. Return: ???
  4773. --------N-6316-------------------------------
  4774. INT 63 - BW-TCP - TCPIP.SYS - RESET NETWORK CONNECTION
  4775.     AH = 16h
  4776.     DS:DI -> ???
  4777. Return: ???
  4778. Note:    calls AH=17h after preprocessing
  4779. SeeAlso: AH=17h,INT 61/AH=19h"PC/TCP"
  4780. --------N-6317-------------------------------
  4781. INT 63 - BW-TCP - TCPIP.SYS - ???
  4782.     AH = 17h
  4783.     DS:DI -> ???
  4784.     ???
  4785. Return: ???
  4786. SeeAlso: AH=18h
  4787. --------N-6318-------------------------------
  4788. INT 63 - BW-TCP - TCPIP.SYS - ???
  4789.     AH = 18h
  4790.     DS:DI -> ???
  4791.     ???
  4792. Return: ???
  4793. Note:    same as AH=17h, except performed with interrupts disabled
  4794. SeeAlso: AH=17h
  4795. --------N-6319-------------------------------
  4796. INT 63 - BW-TCP - TCPIP.SYS - WRITE TO THE NETWORK
  4797.     AH = 19h
  4798.     DS:DI -> ???
  4799.     ???
  4800. Return: BX = number of bytes NOT written
  4801.     ???
  4802. Note:    calls AH=17h with interrupts disabled and ??? set to 01h
  4803. SeeAlso: AH=1Ah,AH=1Bh,INT 61/AH=1Ah"PC/TCP"
  4804. --------N-631A-------------------------------
  4805. INT 63 - BW-TCP - TCPIP.SYS - READ FROM THE NETWORK
  4806.     AH = 1Ah
  4807.     CX = maximum number of bytes to read
  4808.     ES:BP -> ???
  4809.     ???
  4810. Return: CX = number of bytes actually read
  4811.     ???
  4812. SeeAlso: AH=19h,INT 61/AH=1Bh"PC/TCP"
  4813. --------N-631B-------------------------------
  4814. INT 63 - BW-TCP - TCPIP.SYS - ???
  4815.     AH = 1Bh
  4816.     CX = ???
  4817.     ES:BP -> ???
  4818. Return: DX = ???
  4819.     ???
  4820. --------N-631C-------------------------------
  4821. INT 63 - BW-TCP - TCPIP.SYS - ???
  4822.     AH = 1Ch
  4823.     DS:DI -> ???
  4824.     ???
  4825. Return: ???
  4826. Note:    calls AH=17h with ???
  4827. SeeAlso: AH=17h
  4828. --------N-631D-------------------------------
  4829. INT 63 - BW-TCP - TCPIP.SYS - ???
  4830.     AH = 1Dh
  4831.     ???
  4832. Return: ???
  4833. --------N-631E-------------------------------
  4834. INT 63 - BW-TCP - TCPIP.SYS - ???
  4835.     AH = 1Eh
  4836.     DS:BX -> DWORD containing IP address (big-endian)
  4837.     ???
  4838. Return: CF clear if successful
  4839.     CF set on error
  4840.     ???
  4841. --------N-631F-------------------------------
  4842. INT 63 - BW-TCP - TCPIP.SYS - SET SOCKET ??? HANDLER
  4843.     AH = 1Fh
  4844.     BX = socket number
  4845.     ES:SI -> FAR function for ???
  4846. Return: CF clear if successful
  4847.     CF set on error (out of slots)
  4848. SeeAlso: AH=20h
  4849. --------N-6320-------------------------------
  4850. INT 63 - BW-TCP - TCPIP.SYS - REMOVE SOCKET ??? HANDLER
  4851.     AH = 20h
  4852.     BX = socket number
  4853. Return: CF clear if successful
  4854.     CF set on error (not set)
  4855. SeeAlso: AH=1Fh
  4856. --------N-6321-------------------------------
  4857. INT 63 - BW-TCP - TCPIP.SYS - ???
  4858.     AH = 21h
  4859.     ES:SI -> ???
  4860. Return: ???
  4861. SeeAlso: INT 61/AH=1Ch"PC/TCP"
  4862. --------N-6322-------------------------------
  4863. INT 63 - BW-TCP - TCPIP.SYS - REMOVE ??? HANDLER
  4864.     AH = 22h
  4865. Return: CF clear
  4866. Note:    decrements a counter if not already zero, and calls AH=0Ah with BL=11h
  4867.       if the counter reaches zero
  4868. --------N-6323-------------------------------
  4869. INT 63 - BW-TCP - TCPIP.SYS - ???
  4870.     AH = 23h
  4871.     DS:BX -> ???
  4872.     ES:SI -> 6-byte buffer for ???
  4873. Return: CF clear if successful
  4874.     CF set on error
  4875. --------N-6324-------------------------------
  4876. INT 63 - BW-TCP - TCPIP.SYS - GET SOCKET
  4877.     AH = 24h
  4878. Return: AX = socket number (0400h-FFFFh)
  4879. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4880.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4881.       consecutive interrupt (64h by default) if it is loaded
  4882. SeeAlso: INT 62"BW-TCP",INT 64"BW-NFS"
  4883. --------N-6325-------------------------------
  4884. INT 63 - BW-TCP - TCPIP.SYS - GET INTERNET ADDRESS
  4885.     AH = 25h
  4886. Return: CL:CH:DL:DH = caller's Internet address
  4887. SeeAlso: AH=26h,INT 61/AH=05h"PC/TCP"
  4888. --------N-6326-------------------------------
  4889. INT 63 - BW-TCP - TCPIP.SYS - SET INTERNET ADDRESS???
  4890.     AH = 26h
  4891.     CL:CH:DL:DH = Internet address
  4892. Return: nothing
  4893. Note:    this function sets a different variable than AH=25h returns
  4894. SeeAlso: AH=25h
  4895. --------N-6327-------------------------------
  4896. INT 63 - BW-TCP - TCPIP.SYS - SET ???
  4897.     AH = 27h
  4898.     BX = ???
  4899.     ES:SI -> ???
  4900. Return: ???
  4901. --------N-6328-------------------------------
  4902. INT 63 - BW-TCP - TCPIP.SYS - ???
  4903.     AH = 28h
  4904.     ???
  4905. Return: ???
  4906. --------N-6329-------------------------------
  4907. INT 63 - BW-TCP - TCPIP.SYS - ???
  4908.     AH = 29h
  4909.     ???
  4910. Return: ???
  4911. Note:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  4912.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  4913.       consecutive interrupt (64h by default) if it is loaded
  4914. --------*-64---------------------------------
  4915. INT 64 - reserved for user interrupt
  4916. --------d-64---------------------------------
  4917. INT 64 - Adaptec controllers - DRIVE 1 DATA
  4918. Notes:    this vector stores the first four bytes of the parameter table for
  4919.       hard disk 1
  4920.     these vectors are used by the following Adaptec controllers:
  4921.         ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16
  4922.     these vectors are NOT used by the following Adaptec controllers:
  4923.         ACB 2310, ACB 2312, ACB 2320D, ACB 2322D
  4924. SeeAlso: INT 60"Adaptec",INT 65"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  4925. ----------64---------------------------------
  4926. INT 64 - Oracle SQL Protected Mode Executive - ???
  4927. --------N-64---------------------------------
  4928. INT 64 - Novell NetWare to v2.0a - LOW-LEVEL API
  4929. Note:    equivalent to INT 7A for NetWare versions through 2.0a only; later
  4930.       versions do not use this interrupt for IPX/SPX access, instead
  4931.       getting an entry point from INT 2F/AX=7A00h
  4932. SeeAlso: INT 2F/AX=7A00h,INT 7A"Novell"
  4933. --------h-64---------------------------------
  4934. INT 64 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  4935. SeeAlso: INT 65"DG10",INT 66"DG10"
  4936. --------r-64---------------------------------
  4937. INT 64 - Extended Batch Language v3.14+
  4938.     AH = function
  4939.         00h to 5Fh chained to previous handler
  4940.         60h to 6Ch reserved, return immediately
  4941.         80h to FFh chained to previous handler
  4942.         6Dh (v4.01+) insert tone in queue
  4943.         AL = ???
  4944.         CX = frequency in Hertz
  4945.         DL = duration in clock ticks
  4946.         Return: AL = 00h if note stored
  4947.                = 01h if no room to store
  4948.         6Eh clear ??? counter/flag
  4949.         6Fh return counter/flag that AH=6Eh clears
  4950.         70h ???
  4951.         AL = ???
  4952.         71h ???
  4953.         AL = ???
  4954.         72h ???
  4955.         73h insert byte at end of keyboard buffer
  4956.         AL = byte to insert
  4957.         Return: AL = 00h if byte inserted
  4958.                = 01h if no room to store
  4959.         74h insert byte at front of keyboard buffer
  4960.         AL = byte to insert
  4961.         Return: AL = 00h if byte inserted
  4962.                = 01h if no room to store
  4963.         75h ???
  4964.         76h get keyboard "stack" status
  4965.         AL = 'K' if kbd read will read physical keyboard
  4966.              'S' if it will read EBL internal keyboard buffer
  4967.         AH = ???
  4968.         77h clear internal keyboard buffer
  4969.         78h ???
  4970.         AL = ???
  4971.         79h ???
  4972.         7Ah ???
  4973.         AL = ???
  4974.         7Bh ???
  4975.         AL = ???
  4976.         7Ch ???
  4977.         AL = ???
  4978.         7Dh ???
  4979.         AL = ???
  4980.         7Eh clear buffer for ???
  4981.         7Fh installation check
  4982.         Return: CX = version in BCD
  4983.             DI = segment of ???
  4984.             BX = segment of next program's PSP???
  4985. Program: Extended Batch Language is a batch-file enhancer by Seaware
  4986. Notes:    the chaining does not check whether the interrupt had been hooked
  4987.       before, so if you try to chain when the previous vector was
  4988.       0000h:0000h, you'll be in trouble
  4989.     functions 72h and 7Ah-7Dh appear to be interfaces to the optional
  4990.       floating-point and extended function packages
  4991. Index:    installation check;EBL|installation check;Extended Batch Language
  4992. --------d-64---------------------------------
  4993. INT 64 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  4994. Note:    This vector is overwritten by Pdisk to install custom harddrive types.
  4995.       It can either destroy 4 vectors and take no memory or TSR and take
  4996.       up some memory.
  4997. SeeAlso: INT 65"Pdisk"
  4998. --------N-6401-------------------------------
  4999. INT 64 U - BW-NFS - BWRPC - ???
  5000.     AH = 01h
  5001.     ES:BX -> ??? (at least 8 bytes)
  5002.     ES:BP -> DWORD ???
  5003.     ???
  5004. Return: CF clear if successful
  5005.         ???
  5006.     CF set on error
  5007.         CX = 0000h
  5008. Notes:    the Beame&Whiteside TCP/IP protocol stack uses two consecutive
  5009.       interrupts (62h and 63h by default); the BW-NFS client uses a third
  5010.       consecutive interrupt (64h by default) if it is loaded
  5011.     the BWRPC installation check consists of determining the interrupt
  5012.       vector assigned to it (two more than the value returned by reading
  5013.       the ETHDEV27 device), and testing whether the word immediately
  5014.       preceding the interrupt handler is 4257h ('BW')
  5015. SeeAlso: INT 62"BW-TCP",INT 63"BW-TCP"
  5016. Index:    installation checks;BWRPC
  5017. --------N-6402-------------------------------
  5018. INT 64 U - BW-NFS - BWRPC - ???
  5019.     AH = 02h
  5020.     DS:DI -> ???
  5021. Return: ???
  5022. Note:    this call is passed directly through to INT 62/AH=07h
  5023. SeeAlso: INT 62"BW-TCP"
  5024. --------N-6403-------------------------------
  5025. INT 64 U - BW-NFS - BWRPC - ADD ???
  5026.     AH = 03h
  5027.     AL = ???
  5028.     BP = ???
  5029.     ES:SI -> ???
  5030. Return: ???
  5031. Note:    this call is passed directly through to INT 62/AH=0Bh
  5032. SeeAlso: AH=04h,INT 62"BW-TCP"
  5033. --------N-6404-------------------------------
  5034. INT 64 U - BW-NFS - BWRPC - REMOVE ???
  5035.     AH = 04h
  5036.     BP = ???
  5037. Return: ???
  5038. Note:    this call is passed directly through to INT 62/AH=0Ch
  5039. SeeAlso: AH=03h,INT 62"BW-TCP"
  5040. --------N-6405-------------------------------
  5041. INT 64 U - BW-NFS - BWRPC - ???
  5042.     AH = 05h
  5043.     CX = ???
  5044. Return: ???
  5045. Note:    this call is passed directly through to INT 62/AH=13h
  5046. SeeAlso: INT 62"BW-TCP"
  5047. --------N-6406-------------------------------
  5048. INT 64 U - BW-NFS - BWRPC - ???
  5049.     AH = 06h
  5050.     ES:SI -> ???
  5051. Return: AL = 00h if CF clear
  5052. Note:    this call is passed directly through to INT 62/AH=14h
  5053. SeeAlso: INT 62"BW-TCP"
  5054. --------N-6407-------------------------------
  5055. INT 64 U - BW-NFS - BWRPC - GET IP ADDRESS
  5056.     AH = 07h
  5057. Return: CX:DX = IP address
  5058. --------N-6410-------------------------------
  5059. INT 64 U - BW-NFS - BWRPC - CALL ETHDEV.SYS
  5060.     AH = 10h
  5061.     AL = ETHDEV function number
  5062.     other registers as appropriate for ETHDEV call
  5063. Return: as returned by ETHDEV
  5064. Note:    this call is passed directly through to INT 62
  5065. SeeAlso: INT 62"BW-TCP"
  5066. --------N-6411-------------------------------
  5067. INT 64 U - BW-NFS - BWRPC - NOP???
  5068.     AH = 11h
  5069. Return: CF clear
  5070. --------N-64FE-------------------------------
  5071. INT 64 - BW-NFS - BWRPC - MAP EMS PAGE FRAME
  5072.     AH = FEh
  5073.     AL = direction
  5074.         00h map in driver's memory block
  5075.         01h map out driver's memory block
  5076. Return: CF clear if successful
  5077.     CF set on error
  5078.         AL = error code
  5079. Note:    this call is passed through directly to ETHDEV.SYS (see INT 62/AH=FEh)
  5080. SeeAlso: INT 21/AH=3Fh"BW-TCP",INT 62/AH=FEh,INT 63"BW-TCP"
  5081. --------*-65---------------------------------
  5082. INT 65 - reserved for user interrupt
  5083. --------d-65---------------------------------
  5084. INT 65 - Adaptec controllers - DRIVE 1 DATA
  5085. Note:    this vector stores the second four bytes of the parameter table for
  5086.       hard disk 1
  5087. SeeAlso: INT 64"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  5088. --------h-65---------------------------------
  5089. INT 65 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  5090. SeeAlso: INT 64"DG10",INT 66"DG10"
  5091. --------N-65---------------------------------
  5092. INT 65 - FTP Software NDIS-Packet Driver adapter - POST PROCESSING INTERRUPT
  5093. --------U-65---------------------------------
  5094. INT 65 - SD.COM v6.2
  5095.    The unregistered version of SD62.COM uses the low byte of this vector to
  5096.    count the number of invocations, displaying a registration reminder each
  5097.    time after the 20th use.
  5098. --------d-65---------------------------------
  5099. INT 65 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5100. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  5101. --------s-65---------------------------------
  5102. INT 65 - Ad Lib SOUND.COM - INTERFACE
  5103.     SI = function number (see also entries below)
  5104.         0000h Init
  5105.         0002h RelTimeStart
  5106.         0003h SetState
  5107.         0004h GetState
  5108.         0005h Flush
  5109.         0006h SetMode
  5110.         0007h GetMode
  5111.         0008h SetRelVolume
  5112.         0009h SetTempo
  5113.         000Ah SetTranspose
  5114.         000Bh GetTranspose
  5115.         000Ch SetActVoice
  5116.         000Dh GetActVoice
  5117.         000Eh PlayNoteDel
  5118.         000Fh PlayNote
  5119.         0010h SetTimbre
  5120.         0011h SetPitch
  5121.         0012h SetTickBeat
  5122.         0013h NoteOn
  5123.         0014h NoteOff
  5124.         0015h Timbre
  5125.         0016h SetPitchBend
  5126.         0017h WaveForm
  5127.     ES:BX -> arguments
  5128. Note:    the installation check consists of checking for the signature block
  5129.       immediately preceding the interrupt handler (see below)
  5130. SeeAlso: SI=8000h
  5131. Index:    installation check;Ad Lib SOUND.COM
  5132.  
  5133. Format of signature block:
  5134. Offset    Size    Description
  5135.  00h    WORD    version number
  5136.  02h 19 BYTEs    "SOUND-DRIVER-AD-LIB"
  5137.  15h    BYTE    01h
  5138.  16h    BYTE    01h
  5139.  17h    BYTE    00h
  5140. --------s-65----SI0000-----------------------
  5141. INT 65 - Ad Lib SOUND.COM - INITIALIZE (RESET)
  5142.     SI = 0000h
  5143. --------s-65----SI0003-----------------------
  5144. INT 65 - Ad Lib SOUND.COM - SET STATE
  5145.     SI = 0003h
  5146.     ES:BX -> WORD state = 0000h disabled
  5147.                 = 0001h enabled
  5148. SeeAlso: SI=0004h
  5149. --------s-65----SI0004-----------------------
  5150. INT 65 - Ad Lib SOUND.COM - GET STATE
  5151.     SI = 0004h
  5152. Return: AX = 0000h all done playing sounds
  5153.        = else  still playing sounds
  5154. SeeAlso: SI=0003h
  5155. --------s-65----SI0006-----------------------
  5156. INT 65 - Ad Lib SOUND.COM - SET MODE
  5157.     SI = 0006h
  5158.     ES:BX -> WORD mode = 0000h melodic
  5159.                = 0001h percussive
  5160. SeeAlso: SI=0007h
  5161. --------s-65----SI0007-----------------------
  5162. INT 65 - Ad Lib SOUND.COM - GET MODE
  5163.     SI = 0007h
  5164. Return: AX = 0000h melodic
  5165.        = 0001h percussive
  5166. SeeAlso: SI=0006h
  5167. --------s-65----SI000C-----------------------
  5168. INT 65 - Ad Lib SOUND.COM - SET ACTIVE VOICE
  5169.     SI = 000Ch
  5170.     ES:BX -> WORD voice = 0000h to 0008h
  5171. SeeAlso: SI=000Dh
  5172. --------s-65----SI000D-----------------------
  5173. INT 65 - Ad Lib SOUND.COM - GET ACTIVE VOICE
  5174.     SI = 000Dh
  5175. Return: AX = voice (0000h to 0008h)
  5176. SeeAlso: SI=000Ch
  5177. --------s-65----SI8000-----------------------
  5178. INT 65 u - Media Vision FM.COM v4.1a+ - GET INTERNAL DATA STRUCTURES
  5179.     SI = 8000h
  5180. Return: DX:AX -> internal data structures
  5181. Program: FM.COM is an Ad Lib SOUND.COM-compatible driver for Media Vision's
  5182.       Pro Audio Spectrum sound boards
  5183. SeeAlso: SI=8001h
  5184. --------s-65----SI8001-----------------------
  5185. INT 65 u - Media Vision FM.COM v4.1a+ - GET VOICE COUNT
  5186.     SI = 8001h
  5187. Return: AX = ???
  5188.     DX = number of voices??? (09h or 0Bh)
  5189. SeeAlso: SI=8000h
  5190. --------s-65----SI8002-----------------------
  5191. INT 65 - Media Vision FM.COM v4.1a+ - START BACKGROUND FM SOUNDS
  5192.     SI = 8002h
  5193. SeeAlso: SI=8003h
  5194. --------s-65----SI8003-----------------------
  5195. INT 65 - Media Vision FM.COM v4.1a+ - STOP BACKGROUND FM SOUNDS
  5196.     SI = 8003h
  5197. SeeAlso: SI=8002h
  5198. --------s-65----SI8004-----------------------
  5199. INT 65 U - Media Vision FM.COM v4.1a+ - GET ???
  5200.     SI = 8004h
  5201. Return: AX = ??? (0280h)
  5202.     DX = ??? (01A0h)
  5203. --------s-65----SI8005-----------------------
  5204. INT 65 U - Media Vision FM.COM v4.1a+ - ???
  5205.     SI = 8005h
  5206.     ???
  5207. Return: ???
  5208. SeeAlso: SI=8000h
  5209. --------S-65---------------------------------
  5210. INT 65 U - EZRECV v1.0 - API
  5211.     AX = function
  5212.         0000h ???
  5213.         Return: AX = ??? or FFFFh
  5214.         0001h ???
  5215.         Return: AX = status (0000h or 0001h)
  5216.         0002h ???
  5217.         Return: AX = status (0000h or 0001h)
  5218.         0003h set ??? to 0001h
  5219.         Return: AX = 0000h
  5220.         0004h ???
  5221.         Return: AX = ???
  5222. Return: BH = COM port being used
  5223.     BL = speed???
  5224.     CH = ???
  5225.     CL = ???
  5226.     DX = ???
  5227.     DS = ???
  5228.     ES = EZRECV data segment
  5229. Program: EZRECV is a background Zmodem file receiver by Express Consulting
  5230. --------*-66---------------------------------
  5231. INT 66 - reserved for user interrupt
  5232. --------d-66---------------------------------
  5233. INT 66 - Adaptec controllers - DRIVE 1 DATA
  5234. Note:    this vector stores the third four bytes of the parameter table for
  5235.       hard disk 1
  5236. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 67"Adaptec"
  5237. --------h-66---------------------------------
  5238. INT 66 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  5239. SeeAlso: INT 64"DG10"
  5240. --------N-66---------------------------------
  5241. INT 66 C - Nanosoft, Inc. TurboNET - NETWORK PROCESSING ???
  5242. Program: TurboNET is a NetBIOS-based file redirector and server
  5243. Note:    hooked but not used (IRET) by both redirector and server; called from
  5244.       server's INT 28 handler
  5245. SeeAlso: INT 2F/AX=8100h
  5246. --------d-66---------------------------------
  5247. INT 66 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5248. SeeAlso: INT 64"Pdisk",INT 67"Pdisk"
  5249. --------W-66---------------------------------
  5250. INT 66 - Microsoft Windows VITD.386 Virtual Interval Timer
  5251. Note:    This Windows 3.x Virtual Device Driver implements a virtual timer
  5252.       which will expire and call INT 66.  This timer can be used to
  5253.       calculate elapsed execution time etc.
  5254. --------K-66---------------------------------
  5255. INT 66 - Newkey v5.4 - INSTALLATION VECTOR
  5256. Return: immediately (IRET)
  5257. Program: Newkey is a shareware keyboard macro program by Frank A. Bell
  5258. Note:    the installation check consists of testing for the signature bytes
  5259.       FDh FCh FFh FEh at offset 03h in the interrupt handlers segment;
  5260.       Newkey may use any interrupt from 60h through 67h and will install
  5261.       on the highest vector in this range which is unused (normally 66h)
  5262. BUG:    the code obviously intends to use INT F0-FE, INT 70-77, and INT 68-6F
  5263.       before falling back to INT 60-67, but only uses the last of these
  5264.       ranges in v5.4
  5265. SeeAlso: INT 2F/AX=E300h
  5266. Index: installation checks;Newkey|Newkey;installation check
  5267. --------F-6601-------------------------------
  5268. INT 66 - BitFax Scheduler - SET MODE???
  5269.     AH = 01h
  5270. SeeAlso: AH=02h
  5271. --------F-6602-------------------------------
  5272. INT 66 - BitFax Scheduler - SET MODE???
  5273.     AH = 02h
  5274. SeeAlso: AH=01h
  5275. --------F-6603-------------------------------
  5276. INT 66 - BitFax Scheduler - SCHEDULE FAX TRANSMISSIONS
  5277.     AH = 03h
  5278.     ???
  5279. Return: ???
  5280. SeeAlso: AH=05h
  5281. --------F-6604-------------------------------
  5282. INT 66 - BitFax Scheduler - GET STATUS???
  5283.     AH = 04h
  5284. Return: AX = ??? (0000h or 0001h)
  5285.     DX = BitSched version???  (for versions >= 3.00)
  5286.         9796h (ver. 3.00)
  5287.         97E6h (ver. 3.02)
  5288.         92D0h (ver. 3.04.06)
  5289.         9510h (ver. 3.06.02)
  5290. SeeAlso: AH=06h,AX=3345h,INT 2F/AX=8000h"FaxBIOS"
  5291. --------F-6605-------------------------------
  5292. INT 66 - BitFax Scheduler - CONVERT FILE AND SEND FAX
  5293.     AH = 05h
  5294.     BX:CX -> command block (see below)
  5295.     ???
  5296. Return: ???
  5297. SeeAlso: AH=03h
  5298.  
  5299. Format of command block:
  5300. Offset    Size    Description
  5301.  00h 18 BYTEs    configuration bytes???
  5302.  12h    BYTEs    ASCIZ temporary file name to place converted fax
  5303.  52h    BYTEs    ASCIZ directory containing BitFax executables
  5304.  92h    BYTEs    ASCIZ telephone number
  5305.  C2h    BYTE    00h don't send cover page
  5306.         01h send cover page
  5307.  C3h 15 BYTEs    configuration bytes???
  5308.  E2h    BYTEs    ASCIZ path of BITFAX.TRA file (containing additional
  5309.         configuration information???)
  5310. 122h    BYTEs    configuration bytes???
  5311. 12Ch    BYTE    00h don't send cover page
  5312.         01h send cover page
  5313. 12Dh  7 BYTEs    configuration bytes???
  5314. 134h    BYTEs    ASCIZ path of file to send
  5315. 174h    BYTEs    more configuration bytes???
  5316.     ???
  5317. --------F-6606-------------------------------
  5318. INT 66 - BitFax Scheduler - SET MODE???
  5319.     AH = 06h
  5320. Return: DX = BitSched version??? (same as AH=04h)
  5321. SeeAlso: AH=04h
  5322. --------s-660688-----------------------------
  5323. INT 66 - IBMSND driver - PLAY 8-BIT DIGITIZED SOUND
  5324.     AX = 0688h
  5325.     DS:SI -> SNDSTRUC (see below)
  5326. Return: ???
  5327. Program: The IBMSND driver is part of John W. Ratcliff's
  5328.        The IBM Digitized Sound Package
  5329. Note:    the installation check consists of looking for a valid signature
  5330.       string six bytes prior to the interrupt handler; this string may
  5331.       be either "KERN" or "MIDI" (in the latter case, call AX=0701h to
  5332.       determine whether IBMSND is installed)
  5333. SeeAlso: AX=068Bh,AX=068Fh,AX=0701h
  5334.  
  5335. Format of SNDSTRUC:
  5336. Offset    Size    Description
  5337.  00h    DWORD    -> audio data
  5338.  04h    WORD    length of audio data in bytes
  5339.  06h    DWORD    -> playback status flag
  5340.  0Ah    WORD    playback frequency
  5341. --------s-660689-----------------------------
  5342. INT 66 - IBMSND driver - REPORT SOUND DRIVER STATUS
  5343.     AX = 0689h
  5344. Return: AX = status
  5345.         0000h no sound playing
  5346.         0001h sound effect is currently playing
  5347. SeeAlso: AX=0688h,AX=068Bh,AX=068Ch
  5348. --------s-66068A-----------------------------
  5349. INT 66 - IBMSND driver - PREFORMAT SOUND
  5350.     AX = 068Ah
  5351.     DS:SI -> SNDSTRUC (see AX=0688h)
  5352. Desc:    convert audio data into output hardware format
  5353. SeeAlso: AX=068Bh
  5354. --------s-66068B-----------------------------
  5355. INT 66 - IBMSND driver - PLAY PREFORMATTED SOUND
  5356.     AX = 068Bh
  5357.     DS:SI -> SNDSTRUC (see AX=0688h)
  5358. Return: AX = ???
  5359. SeeAlso: AX=0688h,AX=068Ah,AX=068Fh
  5360. --------s-66068C-----------------------------
  5361. INT 66 - IBMSND driver - REPORT AUDIO DRIVER CAPABILITIES
  5362.     AX = 068Ch
  5363. Return: AX = capabilities (see below)
  5364.     DX = playback rate if fixed-frequency playback
  5365. SeeAlso: AX=0689h,AX=068Dh
  5366.  
  5367. Bitfields for capabilities:
  5368.  bit 0    can play audio in background
  5369.  bit 1    data is massaged
  5370.  bit 2    driver plays at fixed frequency, resampling input data to fit
  5371.  bit 3    driver uses timer interrupt
  5372. --------s-66068D-----------------------------
  5373. INT 66 - IBMSND driver - REPORT CURRENT SAMPLE ADDRESS
  5374.     AX = 068Dh
  5375. Return: AX = current playback address
  5376. Desc:    determine what point in the audio data the playback has reached, for
  5377.       synchronization with video or animation effects
  5378. Notes:    this function applies to background playback only
  5379.     the reported address may be an approximation rather than the exact
  5380.       address
  5381. SeeAlso: AX=068Ch,AX=0691h
  5382. --------s-66068E-----------------------------
  5383. INT 66 - IBMSND driver - SET CALLBACK ADDRESS
  5384.     AX = 068Eh
  5385.     BX:DX -> callback function
  5386.         0000h:0000h to disable callback
  5387.     DS = value to load into DS when calling the callback function
  5388. Desc:    specify the function to be called when playback of a sound effect is
  5389.       completed
  5390. Note:    the callback function will typically be called during a hardware
  5391.       interrupt, so all the usual precautions should be taken except for
  5392.       preserving registers
  5393. SeeAlso: AX=0691h
  5394. --------s-66068F-----------------------------
  5395. INT 66 - IBMSND driver - STOP CURRENT SOUND
  5396.     AX = 068Fh
  5397. Desc:    cause any currently-playing sound effect to be terminated
  5398. SeeAlso: AX=0688h,AX=068Bh
  5399. --------s-660690-----------------------------
  5400. INT 66 - IBMSND driver - "SetAudioHardware" SET UP HARDWARE INFO [obsolete]
  5401.     AX = 0690h
  5402. Note:    this function is no longer implemented
  5403. --------s-660691-----------------------------
  5404. INT 66 - IBMSND driver - REPORT CALLBACK ADDRESS
  5405.     AX = 0691h
  5406. Return: AX:DX -> current callback function
  5407.     BX = original caller's DS register
  5408. Program: The IBMSND driver is part of John W. Ratcliff's
  5409.        The IBM Digitized Sound Package
  5410. SeeAlso: AX=068Eh
  5411. --------s-660701-----------------------------
  5412. INT 66 - IBM Digitized Sound Package MIDI driver - GET DIGITIZED SOUND CAPABIL
  5413.     AX = 0701h
  5414. Return: AX = digitized sound capabilities
  5415.         0000h if digitized sound driver (functions 06xxh) not available
  5416. Note:    the installation check for the MIDI driver is to test for the signature
  5417.       "MIDI" six bytes before the interrupt handler
  5418. SeeAlso: AX=0688h
  5419. --------n-6610-------------------------------
  5420. INT 66 - PenDOS - TDMOUSE.EXE - GET ???
  5421.     AH = 10h
  5422. Return: CF clear
  5423.     AX = 0000h
  5424.     BX = ??? (0012h)
  5425.     DX:CX -> TDMOUSE INT 33 handler (IRET to hide mouse from other apps)
  5426. Program: TDMOUSE is a PenDOS hardware driver which allows a mouse to emulate
  5427.       a touchpad; PenDOS is a set of programs by Communication Intelligence
  5428.       Corporation which makes applications pen-aware
  5429. --------n-6611-------------------------------
  5430. INT 66 - PenDOS - TDMOUSE.EXE - SET ??? HANDLER
  5431.     AH = 11h
  5432.     DX:BX -> new handler for ???
  5433. Return: CF clear
  5434.     AX = 0000h
  5435.     DX:BX -> old handler for ??? (points at RETF by default)
  5436. --------n-6612-------------------------------
  5437. INT 66 - PenDOS - TDMOUSE.EXE - INITIALIZE
  5438.     AH = 12h
  5439. Return:    CF clear
  5440.     AX = 0000h
  5441. Note:    this function calls the old mouse handler with functions 0000h, 0002h,
  5442.       0007h, 0008h, 000Fh, 0004h, and 000Ch (in that order)
  5443. SeeAlso: AH=13h
  5444. --------n-6613-------------------------------
  5445. INT 66 - PenDOS - TDMOUSE.EXE - SHUTDOWN???
  5446.     AH = 13h
  5447. Return: CF clear
  5448.     other register as returned by INT 33/AX=0000h
  5449. SeeAlso: AH=12h
  5450. --------n-6614-------------------------------
  5451. INT 66 - PenDOS - TDMOUSE.EXE - ???
  5452.     AH = 14h
  5453.     BX = ???
  5454.     CX = ???
  5455. Return: CF clear
  5456.     AX = 0000h
  5457. --------n-6615-------------------------------
  5458. INT 66 - PenDOS - TDMOUSE.EXE - SET ??? HANDLER
  5459.     AH = 15h
  5460.     DX:BX -> new handler for ???
  5461. Return: CF clear
  5462.     AX = 0000h
  5463.     DX:BX -> old handler (points at RETF by default)
  5464. --------n-6616-------------------------------
  5465. INT 66 - PenDOS - TDMOUSE.EXE - UNUSED FUNCTIONS
  5466.     AH = 16h to 1Fh
  5467. Return: CF set
  5468. Program: TDMOUSE is a PenDOS hardware driver which allows a mouse to emulate
  5469.       a touchpad; PenDOS is a set of programs by Communication Intelligence
  5470.       Corporation which makes applications pen-aware
  5471. --------n-6621-------------------------------
  5472. INT 66 - PenDOS - PINK - ???
  5473.     AH = 21h
  5474. Return: CF clear if successful
  5475.     CF set on error
  5476. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5477. --------n-6622-------------------------------
  5478. INT 66 - PenDOS - PINK - ???
  5479.     AH = 22h
  5480.     DX:BX -> ???
  5481.     CL = ???
  5482. Return: CF clear if successful
  5483.     CF set on error
  5484.     ???
  5485. SeeAlso: AH=24h
  5486. --------n-6623-------------------------------
  5487. INT 66 - PenDOS - PINK - ???
  5488.     AH = 23h
  5489.     ???
  5490. Return: CF clear if successful
  5491.     CF set on error
  5492.     ???
  5493. --------n-6624-------------------------------
  5494. INT 66 - PenDOS - PINK - ???
  5495.     AH = 24h
  5496.     DX:BX -> ???
  5497.     CL = ???
  5498. Return: CF clear if successful
  5499.     CF set on error
  5500.     ???
  5501. SeeAlso: AH=22h
  5502. --------n-6625-------------------------------
  5503. INT 66 - PenDOS - PINK - ???
  5504.     AH = 25h
  5505.     CL = ??? (NOP if 00h)
  5506.     ???
  5507. Return: CF clear if successful
  5508.     CF set on error
  5509.     ???
  5510. --------n-6627-------------------------------
  5511. INT 66 - PenDOS - PINK - ???
  5512.     AH = 27h
  5513.     BL = ???
  5514.     BH = ???
  5515.     CL = ??? (0-3)
  5516.     DL = ??? (> BL)
  5517.     DH = ??? (> BH)
  5518. Return: ???
  5519. --------n-6628-------------------------------
  5520. INT 66 - PenDOS - PINK - ???
  5521.     AH = 28h
  5522.     ???
  5523. Return: CF clear if successful
  5524.     CF set on error
  5525.     ???
  5526. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5527. --------n-6629-------------------------------
  5528. INT 66 - PenDOS - PINK - ???
  5529.     AH = 29h
  5530.     ???
  5531. Return: ???
  5532. Note:    this function sets ??? flag or counter (also set by AH=2Fh) to FFFFh
  5533. --------n-662A-------------------------------
  5534. INT 66 - PenDOS - PINK - ???
  5535.     AH = 2Ah
  5536.     DL = ??? (nonzero)
  5537.     DH = ??? (nonzero)
  5538. Return: CF clear if successful
  5539.     CF set on error
  5540.     ???
  5541. --------n-662B-------------------------------
  5542. INT 66 - PenDOS - PINK - ???
  5543.     AH = 2Bh
  5544.     ???
  5545. Return: CF clear if successful
  5546.     CF set on error
  5547.     ???
  5548. --------n-662F-------------------------------
  5549. INT 66 - PenDOS - PINK - INITIALIZE
  5550.     AH = 2Fh
  5551.     ???
  5552. Return: AX = status
  5553.         0000h failed
  5554.         FFFFh successful
  5555.     ???
  5556. Note:    this function sets ??? flag or counter to FFFFh and hooks INT 1Ch
  5557. --------F-663345-----------------------------
  5558. INT 66 - BitFax Scheduler - REMOVE TSR FROM MEMORY
  5559.     AX = 3345h
  5560. Return: AX = FFFFh error removing TSR
  5561. Note:    the installation check consists of checking for the signature
  5562.       "BitFax Scheduler" beginning two bytes past the interrupt handler
  5563. SeeAlso: AH=04h,INT 2F/AH=2Ah,INT 2F/AX=CB00h
  5564. Index:    installation check;BitFax Scheduler
  5565. --------n-6640-------------------------------
  5566. INT 66 - PenDOS - PKEYUS - GET VERSION
  5567.     AH = 40h
  5568. Return: CF clear
  5569.     AX = 0000h
  5570.     BH = major version (02h for version bundled with IBM DOS 6.1)
  5571.     BL = minor version (00h for version bundled with IBM DOS 6.1)
  5572.     DL = ??? (4Eh)
  5573.     DH = ??? (0Eh)
  5574. --------n-6641-------------------------------
  5575. INT 66 - PenDOS - PKEYUS - SET ???
  5576.     AH = 41h
  5577.     BX = ???
  5578.     CL = ??? (08h-20h)
  5579.     DL = screen column??? (<= 50h)
  5580.     DH = screen row???  (<= 3Ch)
  5581. Return: AX = status (0000h successful, 0001h error)
  5582. Note:    this function also sets an internal flag
  5583. SeeAlso: AH=42h,AH=43h
  5584. --------n-6642-------------------------------
  5585. INT 66 - PenDOS - PKEYUS - ???
  5586.     AH = 42h
  5587. Return: CF clear
  5588.     AX = 0000h
  5589. Note:    this function also clears the flag set by AH=41h
  5590. SeeAlso: AH=41h
  5591. --------n-6643-------------------------------
  5592. INT 66 - PenDOS - PKEYUS - ???
  5593.     AH = 43h
  5594.     BX = ???
  5595.     DX = ???
  5596. Return: AX = status
  5597.         0000h if AH=41h flag set
  5598.         else
  5599.         AH = ???
  5600.         AL = ???
  5601.         BX = ???
  5602.         DX = ???
  5603. SeeAlso: AH=41h    
  5604. --------n-6644-------------------------------
  5605. INT 66 - PenDOS - PKEYUS - UNUSED FUNCTIONS
  5606.     AH = 44h to 4Fh
  5607. Return: CF set
  5608. --------n-6650-------------------------------
  5609. INT 66 - PenDOS - PMOUSE - SET ???
  5610.     AH = 50h
  5611.     BX = ???
  5612.     CH = ???
  5613.     DX = ???
  5614. Return: CF clear
  5615.     AX = 0000h
  5616. --------n-6651-------------------------------
  5617. INT 66 - PenDOS - PMOUSE - NOP
  5618.     AH = 51h
  5619. Return: CF set
  5620. --------n-6652-------------------------------
  5621. INT 66 - PenDOS - PMOUSE - ???
  5622.     AH = 52h
  5623.     BX = ???
  5624.     CL = ???
  5625.     DX = ???
  5626. Return: ???
  5627. --------n-6653-------------------------------
  5628. INT 66 - PenDOS - PMOUSE - UNUSED FUNCTIONS
  5629.     AH = 53h to 57h
  5630. Return: CF set
  5631. --------n-66---------------------------------
  5632. INT 66 - PenDOS - PMOUSE - ALTERNATE API
  5633.     AH = function (58h-5Fh)
  5634. Note:    these functions exactly duplicate AH=50h-57h
  5635. ----------66AA02-----------------------------
  5636. INT 66 - HelpTSR v2.10 - INSTALLATION CHECK
  5637.     AX = AA02h
  5638. Return: ES:DI -> 7 byte signature "HelpTSR" if resident
  5639. Program: HelpTSR is a resident viewer by David Jurgens for HelpPC
  5640. --------n-66C5-------------------------------
  5641. INT 66 - PenDOS - VLOAD - API
  5642.     AH = C5h
  5643.     ???
  5644. Return: ???
  5645. --------t-66FFFBBXFFFB-----------------------
  5646. INT 66 - MicroHelp Stay-Res Plus - ???
  5647.     AX = FFFBh
  5648.     BX = FFFBh
  5649.     ???
  5650. Return: ???
  5651. SeeAlso: AX=FFFEh,INT 2D"AMIS"
  5652. --------t-66FFFEBXFFFE-----------------------
  5653. INT 66 - MicroHelp Stay-Res/Stay-Res Plus - UNINSTALL
  5654.     AX = FFFEh
  5655.     BX = FFFEh
  5656. Return: only if unsuccessful
  5657. Notes:    installation check is for the interrupt handler to begin with the bytes
  5658.       FBh 9Ch or 9Ch FAh, and the program name (not case-sensitive) to
  5659.       appear at offset 0005h (older versions) or the offset returned by
  5660.       AX=FFFFh/BX=FFF0h in the interrupt handler segment.
  5661.     Programs which use Stay-Res include ThesPlus (program name "THESPLUS")
  5662.       and Personal Calendar (program name "CAL") by Paul Mun~oz-Colman.
  5663. SeeAlso: AX=FFFBh,AX=FFFFh,INT 2D"AMIS"
  5664. Index:    installation check;MicroHelp Stay-Res|installation check;ThesPlus
  5665. Index:    installation check;Personal Calendar|installation check;CAL
  5666. --------t-66FFFFBXFFF0-----------------------
  5667. INT 66 - MicroHelp Stay-Res Plus - FIND PROGRAM NAME
  5668.     AX = FFFFh
  5669.     BX = FFF0h
  5670. Return: DI = offset of program name in interrupt handler segment
  5671. SeeAlso: AX=FFFBh,AX=FFFEh,INT 2D"AMIS"
  5672. --------d-67---------------------------------
  5673. INT 67 - Adaptec controllers - DRIVE 1 DATA
  5674. Note:    this vector stores the last four bytes of the parameter table for
  5675.       hard disk 1
  5676. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 66"Adaptec"
  5677. --------d-67---------------------------------
  5678. INT 67 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  5679. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  5680. --------I-67---------------------------------
  5681. INT 67 - Sangoma CCPOP 3270 resident module
  5682. SeeAlso: INT 61"Sangoma",INT 68"Sangoma"
  5683. --------U-67---------------------------------
  5684. INT 67 - CUCKOO.COM - INSTALLATION CHECK
  5685. Program: CUCKOO is a resident on-screen clock with optional hourly chime or
  5686.       cuckoo by an unknown author with revisions by Thomas A. Lundin
  5687. Note:    this is not a vector; when loaded for the first time, CUCKOO.COM uses
  5688.       the last unused (0000h:0000h) vector in the range 60h-67h to store
  5689.       the signature value 434Ch:4F4Bh ('CLOK')
  5690. --------N-6700-------------------------------
  5691. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AND WAIT
  5692.     AH = 00h
  5693.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5694. Return: AL = status (see below)
  5695. SeeAlso: AH=01h,AH=02h"PC-NET",INT 7F/AH=00h
  5696.  
  5697. Values for status:
  5698.  00h    successful
  5699.  01h    invalid function
  5700.  02h    semaphore already locked
  5701.  03h    unable to lock semaphore
  5702.  04h    semaphore space exhausted
  5703.  AH = semaphore owner if status=02h
  5704. --------N-6701-------------------------------
  5705. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE
  5706.     AH = 01h
  5707.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5708. Return: AL = status (see AH=00h)
  5709.     AH = semaphore owner if status=02h
  5710. SeeAlso: AH=00h,AH=02h"PC-NET",INT 7F/AH=01h"Alloy"
  5711. --------N-6702-------------------------------
  5712. INT 67 - PC-NET, Alloy NTNX - UNLOCK SEMAPHORE
  5713.     AH = 02h
  5714.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  5715. Return: AL = status (see AH=00h)
  5716.     AH = semaphore owner if status=02h
  5717. SeeAlso: AH=00h,AH=01h"PC-NET",INT 7F/AH=02h
  5718. --------m-671E-------------------------------
  5719. INT 67 U - Qualitas 386MAX v7.00 - MEMLIMIT - INSTALLATION CHECK
  5720.     AH = 1Eh
  5721. Return: AH = 00h if installed
  5722.         AL destroyed
  5723.         ES:DI -> ASCII signature "MemLimit"
  5724. SeeAlso: AH=1Fh,INT 21/AX=4402h"386MAX"
  5725. --------m-671F-------------------------------
  5726. INT 67 U - Qualitas 386MAX v7.00 - MEMLIMIT - API
  5727.     AH = 1Fh
  5728.     DS:SI -> request packet (see below)
  5729. Return: AH = status (00h successful, 84h invalid function code, etc.)
  5730. SeeAlso: AH=1Eh
  5731.  
  5732. Format of request packet:
  5733. Offset    Size    Description
  5734.  00h    WORD    function code (00h-0Fh)
  5735.  02h    WORD    return code (see below)
  5736.  04h  4 BYTEs    ???
  5737.  08h    WORD    ???
  5738.     ???
  5739.  
  5740. Values for return code:
  5741.  00h    unknown request
  5742.  01h    invalid parameter for VCPI limit
  5743.  02h    VCPI limit set
  5744.  03h    invalid parameter for EMS limit
  5745.  04h    EMS limit set
  5746.  05h    DPMI disabled
  5747.  06h    XMS disabled
  5748.  07h    XMS limit set
  5749.  08h    unable to uninstall
  5750.  09h    unloaded
  5751. --------m-673F--CX5145-----------------------
  5752. INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
  5753.     AH = 3Fh
  5754.     CX = 5145h ("QE")
  5755.     DX = 4D4Dh ("MM")
  5756. Return: AH = 00h if installed
  5757.         ES:DI -> QEMM API entry point
  5758. Notes:    if no other program has hooked INT 67, an alternate installation
  5759.       check is to test for the string
  5760.       "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  5761.       handler's segment; the word at offset 12h contains the offset in
  5762.       the handler's segment of the API entry point
  5763.     although this function is still undocumented, Quarterdeck has recently
  5764.       documented two alternate methods for determining the QEMM API entry
  5765.       point, as well as several of the API functions
  5766.     MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
  5767.       the alternate QEMM installation check and entry point functions 00h,
  5768.       02h, and 03h; version 4D only provides the signature string if the
  5769.       commandline argument "DV" is provided
  5770.     386MAX v6.01 responds to this call, but DESQview 2.42 does not
  5771.       recognize the returned entry point as providing QEMM's capabilities
  5772.       because a) only functions 0Ch (different from QEMM 0Ch) and
  5773.             1000h-1009h are supported,
  5774.           b) status is returned as for EMS functions, not QEMM funcs
  5775.           c) the protected-mode entry point returned by function 1000h
  5776.             only supports functions 0Ch, 1004h, 1005h, and 100Ah
  5777.     the string check mentioned above is not supported by 386MAX
  5778. SeeAlso: AX=5BF0h,AH=DDh,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h/SF=01h
  5779. SeeAlso: INT 21/AX=4402h"QEMM",INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
  5780.  
  5781. Call QEMM entry point with:
  5782.     AH = 00h get QEMM state (documented)
  5783.         Return: CF clear
  5784.             AL = QEMM state
  5785.                 bit 0 set if QEMM turned OFF
  5786.                 bit 1 set if in "Auto" mode
  5787.     AH = 01h set QEMM state (documented)
  5788.         AL = new state
  5789.             bit 0 set: place QEMM in OFF state
  5790.         Return: CF clear if successful
  5791.             CF set on error
  5792.     AH = 02h get ???
  5793.         Return: CF clear
  5794.             AX = segment of ??? data structure
  5795.             Data Structure
  5796.             Offset    Size    Description
  5797.              00h    DWORD    page table entry for ???
  5798.                 ???
  5799.     AH = 03h get QEMM version (documented)
  5800.         Return: CF clear
  5801.             AX = BX = version in BCD
  5802.         Notes:    the most recent official docs state that the version is
  5803.               returned in both AX and BX; older documentation only
  5804.               mentions BX
  5805.             MICEMM returns AX=0001h, BX unchanged
  5806.     AH = 04h allocate 4K page and set AUTO/ON mode
  5807.         Return: CF clear if successful
  5808.                 DX = page number of a 4K page
  5809.             CF set if unable to allocate page
  5810.         Note:    QEMM mode unchanged if not AUTO/OFF
  5811.     AH = 05h free 4K page and turn QEMM off
  5812.         DX = page number returned by function 04h
  5813.         Return: CF clear
  5814.         Note:    QEMM mode unchanged if not AUTO/ON
  5815.     AH = 06h make new mapping context???
  5816.         DX = page number of 4K page to hold page table
  5817.         Return: CF clear
  5818.         Note:    copies page table into given page and then sets ???
  5819.               page table entry to point at copy
  5820.     AH = 07h get mapping context
  5821.         Return: CF clear
  5822.             DX = page number of page table for current mapping
  5823.                 context
  5824.     AH = 08h set mapping context???
  5825.         DX = linear page number of page table
  5826.         Return: CF clear
  5827.     AH = 09h get linear page number for page table entry
  5828.         CX = page table index
  5829.         Return: CF clear
  5830.             DX = linear page number
  5831.     AH = 0Ah set linear page number for page table entry
  5832.         CX = page table index
  5833.         DX = linear page number
  5834.         Return: CF clear
  5835.     AH = 0Bh map 4K pages
  5836.         BX = number of pages
  5837.         CX = first page number (must be 0100h to allocate HMA)
  5838.         DX = EMS handle (memory belonging to EMS handle will be mapped
  5839.             into the address space beginning with the first page
  5840.             allocated to the handle)
  5841.         Return: AH = 00h
  5842.     AH = 0Ch get available memory
  5843.         Return: CF clear
  5844.             BX = 0001h
  5845.             CX = total 4K pages???
  5846.             DX = number of 4K pages free
  5847.     AH = 0Dh ??? (related to callbacks)
  5848.         AL = 00h/01h/02h ???
  5849.         Return: CF clear
  5850.     AH = 0Eh set ??? callbacks
  5851.         DS:BX -> FAR routine for ???
  5852.         ES:DX -> FAR routine for ???
  5853.         Return: CF clear
  5854.         Note:    DS:BX callback should return BX=???; ES:DX is called
  5855.               with BX=???, and should set the ??? from which the
  5856.               other handler read the value of BX.  BH and BL
  5857.               appear to be separate values.
  5858.     AH = 0Fh unmap 4K pages
  5859.         CX = first page number
  5860.         DX = number of pages
  5861.         Return: CF clear
  5862.             AL = 00h/01h if ???
  5863.         Note:    if CX=0100h and DX=0010h, the HMA is remapped to
  5864.               simulate a disabled A20
  5865.     AX = 1000h get protected-mode interface
  5866.         DS:SI -> 16-byte buffer for two GDT entries
  5867.         ES:DI -> buffer for 4K page table
  5868.         Return: CF clear
  5869.             EAX = offset of protected-mode API entry point
  5870.             DS:SI buffer filled with two GDT descriptors
  5871.                 first is QEMM code segment, second is data???
  5872.             ES:DI buffer filled with 4K page table
  5873.             DI points to first unused page table entry
  5874.         SeeAlso: INT 67/AX=DE01h
  5875.     AX = 1001h get CPU debug registers
  5876.         ES:DI -> buffer for debug registers (8 DWORDs)
  5877.         Return: CF clear
  5878.             BL = INT01 handling (see function 1002h)
  5879.             ES:DI buffer filled
  5880.     AX = 1002h set CPU debug registers
  5881.         BL = INT01 handling
  5882.             00h     reflect all debugging exceptions as V86-mode INT 01's
  5883.             else convert debugging exceptions other than single-step
  5884.                into V86-mode INT 03's, single-step to INT 01's
  5885.         ES:DI -> buffer containing debug registers (8 DWORDs)
  5886.         Return: CF clear
  5887.         Notes:    identical to INT 67/AX=DE09h if BL=01h
  5888.             the INT01 handling flag is set to 01h by the general-
  5889.               protection violation handler for certain privileged
  5890.               instructions
  5891.     AX = 1003h get machine status word CR0
  5892.         Return: CF clear
  5893.             EAX = contents of CR0
  5894.         SeeAlso: INT 67/AX=DE07h
  5895.     AX = 1004h allocate a 4K page
  5896.         Return: CF clear if successful
  5897.                 EDX = linear address of allocated page
  5898.             CF set on error
  5899.         SeeAlso: INT 67/AX=DE04h
  5900.     AX = 1005h free 4K page
  5901.         EDX = linear address of page to free
  5902.         Return: CF clear
  5903.         SeeAlso: INT 67/AX=DE05h
  5904.     AX = 1006h NOP
  5905.         Return: CF set
  5906.     AX = 1007h get maximum physical memory address
  5907.         Return: CF clear
  5908.             EDX = physical address of highest 4K memory page
  5909.         SeeAlso: INT 67/AX=DE02h
  5910.     AX = 1008h get physical address of page in first megabyte
  5911.         CX = page number (linear address shifted right 12 bits)
  5912.         Return: CF clear
  5913.             EDX = linear address of page
  5914.         SeeAlso: function 1F00h
  5915.     AX = 1009h switch to protected mode
  5916.         ESI = linear address in first megabyte of system reg values
  5917.             (see INT 67/AX=DE0Ch)
  5918.         interrupts disabled
  5919.         Return: interrupts disabled
  5920.             GDTR, IDTR, LDTR, TR loaded
  5921.             SS:ESP must have at least 16 bytes space, and the
  5922.                 entry point is required to set up a new stack
  5923.                 before enabling interrupts
  5924.             EAX, ESI, DS, ES, FS, GS destroyed
  5925.     AX = 100Ah switch back to virtual-86 mode
  5926.         DS = selector for data segment from function 1000h
  5927.         SS:ESP in first megabyte of linear memory
  5928.         interrupts disabled
  5929.         STACK:    QWORD  return address from FAR call to 32-bit segment
  5930.             DWORD  EIP
  5931.             DWORD  CS
  5932.             DWORD  reserved for EFLAGS
  5933.             DWORD  ESP
  5934.             DWORD  SS
  5935.             DWORD  ES
  5936.             DWORD  DS
  5937.             DWORD  FS
  5938.             DWORD  GS
  5939.         will switch to virtual86 mode with interrupts disabled, all
  5940.           segment registers loaded, and EAX destroyed.
  5941.     AH = 11h get memory type map
  5942.         AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
  5943.             by QEMM 6.00)
  5944.         ES:DI -> 256-byte buffer for memory types
  5945.         Return: CF clear
  5946.             BL = ???
  5947.             ES:DI buffer filled
  5948.         Note:    each byte of the buffer corresponds to a 4K page, and
  5949.               contains the type of that page: 00h = mappable,
  5950.               02h = mapped ROM, 03h = high RAM, 04h = excluded,
  5951.               05h = video, 06h = ROM, 07h = adapter ROM,
  5952.               08h = split ROM, 09h = page frame, 0Ah = RAMmable,
  5953.               0Bh = conventional
  5954.     AH = 12h get HIRAM chain
  5955.         Return: CF clear
  5956.             BX = segment of first MCB in high memory
  5957.                 0000h if no high memory
  5958.     AX = 1300h VIDRAMEGA???
  5959.         BL = 00h copy ???
  5960.              nonzero copy ??? (reverse)
  5961.         Return: CF clear
  5962.             AL = 00h if all pages clean
  5963.                = 01h if any page dirty
  5964.     AX = 1301h check if ???
  5965.         DX:DI = start address of range to check ???
  5966.         CX = length of range
  5967.         Return: CF clear
  5968.             CX = ??? (0000h or 1000h)
  5969.     AX = 1302h ???
  5970.         BL = ???
  5971.         BH = ???
  5972.         CX = ???
  5973.         SI = offset of ???
  5974.         DI = offset of ???
  5975.         ???
  5976.         Return: CF clear
  5977.             ???
  5978.         Note:    disables certain interrupts at the two 8259 PICs during
  5979.               execution; also modifies CRT controller during
  5980.               execution under certain circumstances
  5981.     AX = 1303h initialize VIDRAM EMS
  5982.         BX = number of pages (less 1) of EMS to allocate
  5983.         Return: CF clear if successful
  5984.                 DX = EMS handle
  5985.             CF set on error
  5986.     AX = 1304h shutdown VIDRAM EMS
  5987.         DX = EMS handle
  5988.         Return: CF clear
  5989.     AX = 1305h ??? (related to VIDRAM, changes memory mappings)
  5990.         CX = ???
  5991.         Return: CF clear
  5992.         Note:    disables certain interrupts at the two 8259 PICs during
  5993.               execution (see AX=130Ch) and runs inside a QEMM
  5994.               critical section
  5995.     AX = 1306h set DESQview critical section counter address
  5996.         ES:BX -> WORD DESQview critical section counter or 0000h:0000h
  5997.         Return: CF clear
  5998.         Note:    also sets a pointer in the low-memory part of QEMM to
  5999.               the current value of INT 15 if ES:BX not 0000h:0000h
  6000.     AX = 1307h ??? (changes memory mappings)
  6001.         Return: CF clear
  6002.         Note:    disables certain interrupts at the two 8259 PICs during
  6003.               execution (see AX=130Ch) and runs inside a QEMM
  6004.               critical section
  6005.     AX = 1308h set/reset ???
  6006.         BL = ??? (zero/nonzero)
  6007.         Return: CF clear
  6008.     AX = 1309h Hercules mode-change support
  6009.         ES:BX -> new address for Hercules mode-change callback
  6010.         Return: CF clear
  6011.         Note:    the callback function is called whenever the CRTC mode
  6012.               register is written, with AL set to the value written
  6013.     AX = 130Ah virtualize EGA/VGA I/O ports 03C8h/03C9h???
  6014.         CX:DX -> buffer for storing CRTC register contents???
  6015.             or 0000h:0000h to disable
  6016.         Return: CF clear
  6017.     AX = 130Bh ???
  6018.         BL = ??? (??? or 00h)
  6019.         Return: CF clear
  6020.             ???
  6021.         Note:    calls AX=130Eh in some cases
  6022.     AX = 130Ch set interrupts to mask
  6023.         BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
  6024.             AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
  6025.         Return: CF clear
  6026.     AX = 130Dh map EGA memory at A0000h
  6027.         ???
  6028.         Return: CF clear
  6029.         Note:    disables certain interrupts at the two 8259 PICs during
  6030.               execution (see AX=130Ch) and runs inside a QEMM
  6031.               critical section
  6032.             calls AX=1307h
  6033.     AX = 130Eh ??? (modifies CRT controller setup)
  6034.         ???
  6035.         Return: CF clear
  6036.     AX = 130Fh reset ???
  6037.         Return: CF clear
  6038.     AX = 1310h ???
  6039.         ???
  6040.         Return: CF clear
  6041.         Note:    disables certain interrupts at the two 8259 PICs during
  6042.               execution (see AX=130Ch) and runs inside a QEMM
  6043.               critical section
  6044.             also calls AX=130Dh
  6045.     AX = 1311h set ???
  6046.         BL = ???
  6047.         Return: CF clear
  6048.     AX = 1312h (v6.02) NOP???
  6049.         Note:    called by DV 2.42, but appears to be a NOP in QEMM 6.02
  6050.     AX = 1400h ???
  6051.         ES:DI -> ??? data structure (at least 24 bytes)
  6052.         BL = ???
  6053.         Return: AX = ???
  6054.         Data structure
  6055.         Offset    Size    Description
  6056.          00h    WORD    ???
  6057.          02h    DWORD    far pointer to ???
  6058.          06h    DWORD    far pointer to ??? pointer array (see below)
  6059.          0Ah    DWORD    far pointer to ???
  6060.          0Eh    DWORD    ???
  6061.          12h    WORD    segment of ???
  6062.          14h    DWORD    far pointer to ???
  6063.         Pointer array
  6064.         Offset    Size    Description
  6065.          00h    WORD    number of pointers to follow
  6066.          02h  N DWORDs    far pointers to ???
  6067.         Note: QEMM converts the pointers into linear addresses in place
  6068.     AX = 1401h ???
  6069.         Return: CF clear
  6070.             ???
  6071.     AX = 1402h ???
  6072.         BL = function
  6073.             00h NOP
  6074.             01h ???
  6075.             02h ???
  6076.             other ???
  6077.         ES:DI -> ???
  6078.         Return: CF clear
  6079.             ???
  6080.         Data structure
  6081.         Offset    Size    Description
  6082.          00h    WORD    segment of ??? (X, word at X:0136h set to X)
  6083.          02h    WORD    segment of ??? (word at X:0124h set to this)
  6084.          04h    WORD    number of paragraphs of ???
  6085.          06h  3 WORDs    ??? (copied to X:0000h)
  6086.          0Ch    WORD    ???
  6087.     AX = 1403h add ??? to list and ??? (execute func 1406h)
  6088.         ES:DI -> ??? structure added to end of ??? list
  6089.             (at least 31 bytes, DWORD at offset 06h used for
  6090.              storing pointer to next struc, WORD at offset 00h
  6091.              seems to be a key or index)
  6092.         Return: CF clear
  6093.     AX = 1404h NOP
  6094.     AX = 1405h remove ??? from ??? list
  6095.         BX = key???
  6096.         Return: CF clear
  6097.     AX = 1406h ???
  6098.         ???
  6099.         Return: CF clear
  6100.             ???
  6101.     AX = 1407h ???
  6102.         ???
  6103.         Return: CF clear
  6104.             ???
  6105.     AX = 1408h ???
  6106.         ???
  6107.         Return: CF clear
  6108.             ???
  6109.     AX = 1409h ???
  6110.         ???
  6111.         Return: CF clear
  6112.             ???
  6113.     AX = 140Ah ???
  6114.         BX = ???
  6115.         Return: CF clear
  6116.             ???
  6117.     AX = 140Bh ???
  6118.         BX = ???
  6119.         Return: CF clear
  6120.             SI = segment of 256-byte buffer???
  6121.     AH = 15h ???
  6122.         ES:BX -> ??? or 0000h:0000h
  6123.         Return: CF clear
  6124.      ---QEMM v5.00+ ---
  6125.     AX = 1600h get memory access status
  6126.         ES:DI -> 256-byte buffer
  6127.         Return: ES:DI buffer filled
  6128.         Note:    each byte of the buffer indicates the status of a 4K
  6129.               page (bit 0 set if read, bit 1 set if written)
  6130.     AX = 1601h set memory access status
  6131.         ES:DI -> 256-byte buffer containing access statuses (see above)
  6132.     AH = 17h get memory usage statistics
  6133.         ES:DI -> 81-byte buffer for memory statistics (see below)
  6134.         Return: CF clear
  6135.      ---QEMM v5.11+ ---
  6136.     AH = 18h check whether conventional memory mapped into address range
  6137.         ES:BX = starting address
  6138.         CX = number of 4K pages
  6139.         Return: CF clear
  6140.             AL = 00h one or more pages is remapped
  6141.                  01h all pages in range are conventional memory
  6142.                 (physical address == virtual address)
  6143.     AH = 19h NOP
  6144.         Return: CF set
  6145.     AH = 1Ah I/O port access
  6146.         AL = subfunction
  6147.             00h get byte from I/O port
  6148.             Return: BL = port value
  6149.             01h send byte to I/O port
  6150.             BL = value to send
  6151.             02h send byte to I/O port, get byte from following port
  6152.             BH = value to send
  6153.             Return: BL = value read
  6154.             03h send bytes to two consecutive I/O ports
  6155.             BH = value for first I/O port (DX)
  6156.             BL = value for second I/O port (DX+1)
  6157.         DX = port number
  6158.         Return: CF clear
  6159.     AH = 1Bh MS Windows 3.x support
  6160.         AL = subfunction
  6161.             00h get EMM Import Structure address
  6162.             ES:DI -> buffer for EMM import data structure
  6163.             Return: CF set on error
  6164.                 CF clear if successful
  6165.             EMM Import data structure:
  6166.             Offset    Size    Description
  6167.              00h    DWORD    physical address of EMM import struct
  6168.              04h    BYTE    major version (v6.00 sets to 01h)
  6169.              05h    BYTE    minor version (v6.00 sets to 00h/0Bh)
  6170.             SeeAlso: INT 21/AX=4402h/SF=01h
  6171.             01h ???
  6172.             Return: CF set on error
  6173.                 CF clear if successful
  6174.             02h ???
  6175.             Return: CF set on error
  6176.                 CF clear if successful
  6177.             03h MS Windows initializing
  6178.             CX = segment from which Windows init broadcast made???
  6179.             DL = Windows startup flags???
  6180.             DI = Windows version number (major in upper byte)
  6181.             Return: ???
  6182.             SeeAlso: INT 2F/AX=1605h
  6183.             04h MS Windows terminating
  6184.             Return: CF clear
  6185.             05h determine whether program is driver???
  6186.             DS:DX -> ASCIZ filename
  6187.             Return: CF clear
  6188.                 AL = 01h if string ends in ".DRV"
  6189.                    = FFh if string ends in "GDI.EXE"
  6190.                    = 00h otherwise
  6191.             06h ???
  6192.             CX = length of data pointed at by DS:DX
  6193.             DS:DX -> ???
  6194.             Return: CF clear
  6195.             07h BUG: QEMM 6.00-7.01 accept this and branch randomly
  6196.             else Return: CF set
  6197.     AH = 1Ch protected-mode hardware interrupt handlers ???
  6198.         AL = subfunction
  6199.             00h restore??? IRQ0-7 handlers
  6200.             01h set??? IRQ0-7 handlers
  6201.             ES:DI -> 8 DWORDs containing ???
  6202.             02h restore??? IRQ8-15 handlers
  6203.             03h set??? IRQ8-15 handlers
  6204.             ES:DI -> 8 DWORDs containing ???
  6205.         BUG: although the jump table only contains four entries,
  6206.             QEMM 6.00 will attempt to use it for any value of
  6207.             AL between 00h and 2Ah, thus branching unpredictably
  6208.             for AL=04h-2Ah; QEMM v7.01 behaves similarly for
  6209.             AL=04h-1Bh
  6210.      ---QEMM v6.00+ ---
  6211.     AH = 1Dh Stealth interrupts
  6212.         AL = subfunction
  6213.             00h switch to pre-Stealth interrupt vector table
  6214.             Note:    also switches VGA Save table pointer
  6215.                   (0040h:00A8h) and overwrites the vectors
  6216.                   currently assigned for use by the two
  6217.                   interrupt controllers (see INT 67/AX=DE0Ah)
  6218.                   with the vectors for INT 08-0F and 70-77 (to
  6219.                   avoid crashing the system).
  6220.             01h restore user interrupt vector table
  6221.             Notes:    interrupts should be disabled around the
  6222.                   AX=1D00h and AX=1D01h calls because QEMM does
  6223.                   not modify the memory maps to map in ROM, so
  6224.                   an interrupt could be disastrous
  6225.                 clears any pending IRQ7 at end of function
  6226.             else
  6227.             Return: CF set
  6228.         Note:    functions 1Dxxh are not supported by QEMM v7.01, and
  6229.               always return CF set
  6230.     AH = 1Eh Stealth information (documented)
  6231.         AL = subfunction
  6232.             00h "QEMM_GET_INFO" get Stealth configuration
  6233.             Return: BL = flags (documented as "reserved")
  6234.                     bit 0: conventional memory sorted
  6235.                     bit 1: conventional memory filled
  6236.                     bit 2: ???
  6237.                     bit 3: ???
  6238.                     bit 4: expanded memory is in use
  6239.                     bit 5: ???
  6240.                 BH = reserved (always 00h for v6.00)
  6241.                 CL = stealth type (00h none,46h Frame,4Dh Map)
  6242.                 CH = suspend/resume interrupt (00h none)
  6243.                 DX = reserved (always 0000h for v6.00)
  6244.                 SI = reserved (always 0000h for v6.00)
  6245.                 DI = reserved (always 0000h for v6.00)
  6246.             01h "QEMM_GET_STEALTH_COUNT" get number of Stealth'ed ROMs
  6247.             Return: CF clear
  6248.                 BX = number of Stealth'ed ROMs
  6249.             02h "QEMM_GET_STEALTH_LIST" get Stealth'ed ROM info
  6250.             ES:DI -> buffer for Stealth ROM info (see below)
  6251.             Return: CF clear
  6252.                 BX = number of Stealth'ed ROMs
  6253.                 ES:DI buffer filled
  6254.             else
  6255.             Return: CF set
  6256.     AH = 1Fh page table manipulation (documented)
  6257.         AL = subfunction
  6258.             00h "QEMM_GET_PTE" get page table entry
  6259.             CX = page number
  6260.             Return: EDX = page table entry
  6261.                 CF clear
  6262.             01h "QEMM_SET_PTE" set page table entry
  6263.             CX = page number
  6264.             EDX = new page table entry
  6265.             Return: CF clear
  6266.             SeeAlso: function 1008h
  6267.             else
  6268.             Return: CF set
  6269.     AH = 20h asynchronous disk access support (documented)
  6270.         AL = subfunction
  6271.             00h "QEMM_GET_VHI_INFO" get VirtualHDIRQ information
  6272.             Return: CF clear
  6273.                 BL = flags
  6274.                     bit 7: VirtualHDIRQ setting respected
  6275.                      (set if Stealth active)
  6276.                     bits 6-1 reserved
  6277.                     bit 0: VirtualHDIRQ currently enabled
  6278.                     (INT 15/AH=90h suppressed when enabled)
  6279.             01h "QEMM_SET_VHI_FINO" set VirtualHDIRQ state
  6280.             BL bit 0 = new VirtualHDIRQ state
  6281.             Return: CF clear
  6282.                 BL = old VHI setting (bits 0 and 7, see above)
  6283.             else
  6284.             Return: CF set
  6285.     AH = 21h Stealth support (documented)
  6286.         AL = subfunction
  6287.             00h "QEMM_COPY_STEALTH_ROMS" copy data from Stealthed addr
  6288.             DS:SI -> start address of hidden memory to copy
  6289.             ES:DI -> buffer for copied data
  6290.             ECX = number of bytes to copy
  6291.             Return: CF clear if successful
  6292.                 CF set on error (DS:SI < C000h:0000h or
  6293.                          DS:SI + ECX > 1M)
  6294.             else
  6295.             Return: CF set
  6296.     ---QEMM v6.03+ ---
  6297.     AH = 22h DESQview/X support
  6298.         AL = subfunction
  6299.             00h get ???
  6300.             Return: CF clear
  6301.                 ES:DI -> ???
  6302.             01h set ???
  6303.             ES:DI -> ??? or 0000h:0000h
  6304.             Return: CF clear if successful
  6305.                 CF set on error
  6306.     ---QEMM v6.04+ ---
  6307.     AH = 23h ???
  6308.         AL = subfunction
  6309.             00h get ???
  6310.             BX = which ??? to get (must be 0000h for v6.04)
  6311.             Return: CF clear if successful
  6312.                     ES:DI -> ???
  6313.                 CF set on error
  6314.             01h set ???
  6315.             BX = which ??? to set (must be 0000h for v6.04)
  6316.             ES:DI -> ???
  6317.             Return: CF clear if successful
  6318.                 CF set on error
  6319.             02h clear specified ???
  6320.             BX = which ??? to clear (must be 0000h for v6.04)
  6321.             Return: CF clear if successful
  6322.                 CF set on error
  6323.             FFh clear all ???
  6324.             else
  6325.             Return: CF set
  6326.     ---QEMM v7.01 only---
  6327.     AH = 24h ST-DBL support
  6328.         AL = subfunction
  6329.             00h set ???
  6330.             EDX -> information table
  6331.                 (EDX = segment SHL 16 + offset)
  6332.             01h ???
  6333.     other
  6334.         Return: CF set
  6335.  
  6336. Format of QEMM 6.0 memory statistics:
  6337. Offset    Size    Description
  6338.  00h    BYTE    01h if Shadow RAM found, 00h otherwise
  6339.  01h    DWORD    initial conventional memory in bytes
  6340.  05h    DWORD    initial extended memory in bytes
  6341.  09h    DWORD    initial expanded memory in bytes
  6342.  0Dh    DWORD    initial "top" or "shadow" memory in bytes
  6343.  11h    DWORD    Unavailable conventional memory in bytes
  6344.  15h    DWORD    Unavailable extended memory in bytes
  6345.  19h    DWORD    Unavailable expanded memory in bytes
  6346.  1Dh    DWORD    Unavailable "top" or "shadow" memory in bytes
  6347.         Add to offset 49h for Total unavailable top/shadow.
  6348.  21h    DWORD    QEMM code size in bytes
  6349.  25h    DWORD    QEMM data size in bytes
  6350.  29h    DWORD    bytes used for TASKS=
  6351.  2Dh    DWORD    DMA buffer size
  6352.  31h    DWORD    bytes used for MAPS=
  6353.  35h    DWORD    bytes of high RAM
  6354.  39h    DWORD    bytes used by mapped ROMs
  6355.  3Dh    DWORD    bytes of conventional memory provided by QEMM
  6356.  41h    DWORD    bytes of extended memory NOT converted by QEMM (EXT=xxx)
  6357.  45h    DWORD    bytes of EMS/XMS pool memory provided by QEMM
  6358.  49h    DWORD    Unavailable "top" or "shadow" memory in bytes
  6359.         Add to offset 1Dh for Total unavailable top/shadow.
  6360.  4Dh    DWORD    conventional memory overhead in bytes
  6361.         (set to 0 by QEMM.COM prior to call)
  6362.  
  6363. Format of Stealth ROM info [array]:
  6364. Offset    Size    Description
  6365.  00h    WORD    starting segment of ROM
  6366.  02h    WORD    length of ROM in paragraphs
  6367. --------m-6740-------------------------------
  6368. INT 67 - LIM EMS - GET MANAGER STATUS
  6369.     AH = 40h
  6370. Return: AH = status (00h,80h,81h,84h) (see below)
  6371. Note:    this call can be used only after establishing that the EMS driver is in
  6372.       fact present
  6373. SeeAlso: AH=3Fh,AX=FFA5h
  6374.  
  6375. Values for EMS function status:
  6376.  00h    successful
  6377.  80h    internal error
  6378.  81h    hardware malfunction
  6379.  83h    invalid handle
  6380.  84h    undefined function requested by application
  6381.  85h    no more handles available
  6382.  86h    error in save or restore of mapping context
  6383.  87h    insufficient memory pages in system
  6384.  88h    insufficient memory pages available
  6385.  89h    zero pages requested
  6386.  8Ah    invalid logical page number encountered
  6387.  8Bh    invalid physical page number encountered
  6388.  8Ch    page-mapping hardware state save area is full
  6389.  8Dh    save of mapping context failed
  6390.  8Eh    restore of mapping context failed
  6391.  8Fh    undefined subfunction
  6392.  90h    undefined attribute type
  6393.  91h    feature not supported
  6394.  92h    successful, but a portion of the source region has been overwritten
  6395.  93h    length of source or destination region exceeds length of region
  6396.       allocated to either source or destination handle
  6397.  94h    conventional and expanded memory regions overlap
  6398.  95h    offset within logical page exceeds size of logical page
  6399.  96h    region length exceeds 1M
  6400.  97h    source and destination EMS regions have same handle and overlap
  6401.  98h    memory source or destination type undefined
  6402.  9Ah    specified alternate map register or DMA register set not supported
  6403.  9Bh    all alternate map register or DMA register sets currently allocated
  6404.  9Ch    alternate map register or DMA register sets not supported
  6405.  9Dh    undefined or unallocated alternate map register or DMA register set
  6406.  9Eh    dedicated DMA channels not supported
  6407.  9Fh    specified dedicated DMA channel not supported
  6408.  A0h    no such handle name
  6409.  A1h    a handle found had no name, or duplicate handle name
  6410.  A2h    attempted to wrap around 1M conventional address space
  6411.  A3h    source array corrupted
  6412.  A4h    operating system denied access
  6413. --------m-6741-------------------------------
  6414. INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
  6415.     AH = 41h
  6416. Return: AH = status (see also AH=40h)
  6417.         00h function successful
  6418.         BX = segment of page frame
  6419. SeeAlso: AH=58h,AH=68h
  6420. --------m-6742-------------------------------
  6421. INT 67 - LIM EMS - GET NUMBER OF PAGES
  6422.     AH = 42h
  6423. Return: AH = status (see also AH=40h)
  6424.         00h function successful
  6425.         BX = number of unallocated pages
  6426.         DX = total number of pages
  6427. BUG:    DOS 6.0 EMM386.EXE causes a system lock-up or reboot if in AUTO mode
  6428.       when this call is made; use AH=46h to ensure that EMM386 is ON
  6429.       before making this call
  6430. SeeAlso: INT 2F/AX=2702h
  6431. --------m-6743-------------------------------
  6432. INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
  6433.     AH = 43h
  6434.     BX = number of logical pages to allocate
  6435. Return: AH = status (00h,80h,81h,84h,85h,87h,88h,89h) (see AH=40h)
  6436.     DX = handle if AH=00h
  6437. SeeAlso: AH=45h
  6438. --------m-6744-------------------------------
  6439. INT 67 - LIM EMS - MAP MEMORY
  6440.     AH = 44h
  6441.     AL = physical page number (0-3)
  6442.     BX = logical page number
  6443.         or FFFFh to unmap (QEMM)
  6444.     DX = handle
  6445. Return: AH = status (00h,80h,81h,83h,84h,8Ah,8Bh) (see AH=40h)
  6446. SeeAlso: AH=69h
  6447. --------m-6745-------------------------------
  6448. INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
  6449.     AH = 45h
  6450.     DX = EMM handle
  6451. Return: AH = status (00h,80h,81h,83h,84h,86h) (see AH=40h)
  6452. SeeAlso: AH=43h
  6453. --------m-6746-------------------------------
  6454. INT 67 - LIM EMS - GET EMM VERSION
  6455.     AH = 46h
  6456. Return: AH = status (00h,80h,81h,84h) (see AH=40h)
  6457.     AL = EMM version number if AH=00h
  6458. --------m-6747-------------------------------
  6459. INT 67 - LIM EMS - SAVE MAPPING CONTEXT
  6460.     AH = 47h
  6461.     DX = handle
  6462. Return: AH = status (see below)
  6463. SeeAlso: AH=48h
  6464.  
  6465. Values for status:
  6466.  00h    successful
  6467.  80h    internal error
  6468.  81h    hardware malfunction
  6469.  83h    invalid handle
  6470.  84h    undefined function requested
  6471.  8Ch    page-mapping hardware state save area is full
  6472.  8Dh    save of mapping context failed
  6473.  8Eh    restore of mapping context failed
  6474. --------m-6748-------------------------------
  6475. INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
  6476.     AH = 48h
  6477.     DX = handle
  6478. Return: AH = status (00h,80h,81h,83h,84h,8Eh) (see AH=47h)
  6479. SeeAlso: AH=47h
  6480. --------m-6749-------------------------------
  6481. INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
  6482.     AH = 49h
  6483. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  6484. --------m-674A-------------------------------
  6485. INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
  6486.     AH = 4Ah
  6487. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  6488. --------m-674B-------------------------------
  6489. INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
  6490.     AH = 4Bh
  6491. Return: AH = status (see below)
  6492.     BX = number of EMM handles if AH=00h
  6493.  
  6494. Values for status:
  6495.  00h    successful
  6496.  80h    internal error
  6497.  81h    hardware malfunction
  6498.  83h    invalid handle
  6499.  84h    undefined function requested
  6500. --------m-674C-------------------------------
  6501. INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
  6502.     AH = 4Ch
  6503.     DX = EMM handle
  6504. Return: AH = status (see AH=4Bh)
  6505.     BX = number of logical pages if AH=00h
  6506. SeeAlso: AH=4Dh
  6507. --------m-674D-------------------------------
  6508. INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
  6509.     AH = 4Dh
  6510.     ES:DI -> array to receive information
  6511. Return: AH = status (00h,80h,81h,84h) (see AH=4Bh)
  6512.     ---if AH=00h---
  6513.     BX = number of active EMM handles
  6514.     array filled with 2-word entries, consisting of a handle and the
  6515.       number of pages allocated to that handle
  6516. SeeAlso: AH=4Ch
  6517. --------m-674E-------------------------------
  6518. INT 67 - LIM EMS - GET OR SET PAGE MAP
  6519.     AH = 4Eh
  6520.     AL = 00h if getting mapping registers
  6521.          01h if setting mapping registers
  6522.          02h if getting and setting mapping registers at once
  6523.          03h if getting size of page-mapping array
  6524.     DS:SI -> array holding information (AL=01h/02h)
  6525.     ES:DI -> array to receive information (AL=00h/02h)
  6526. Return: AH = status
  6527.         00h successful
  6528.         AL = bytes in page-mapping array (AL=03h only)
  6529.         array pointed to by ES:DI receives mapping info (AL=00h/02h)
  6530.         80h internal error
  6531.         81h hardware malfunction
  6532.         84h undefined function requested
  6533.         8Fh undefined subfunction parameter
  6534.         A3h contents of source array corrupted (EMS 4.0?)
  6535. Notes:    this function was designed to be used by multitasking operating systems
  6536.       and should not ordinarily be used by appplication software.
  6537.     MD386 returns the size of the page-mapping array in AX instead of AL
  6538. SeeAlso: AH=4Fh
  6539. --------m-674F-------------------------------
  6540. INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
  6541.     AH = 4Fh
  6542.     AL = subfunction
  6543.         00h get partial page map
  6544.            DS:SI -> structure containing list of segments whose mapping
  6545.             contexts are to be saved
  6546.            ES:DI -> array to receive page map
  6547.         01h set partial page map
  6548.            DS:SI -> structure containing saved partial page map
  6549.         02h get size of partial page map
  6550.            BX = number of mappable segments in the partial map to be saved
  6551. Return: AH = status
  6552.         00h successful
  6553.         80h internal error
  6554.         81h hardware malfunction
  6555.         84h undefined function requested
  6556.         8Bh one of specified segments is not mappable
  6557.         8Fh undefined subfunction parameter
  6558.         A3h contents of partial page map corrupted or count of mappable
  6559.         segments exceeds total number of mappable segments in system
  6560.     AL = size of partial page map for subfunction 02h
  6561. SeeAlso: AH=4Eh
  6562. --------m-6750-------------------------------
  6563. INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
  6564.     AH = 50h
  6565.     AL = subfunction
  6566.         00h use physical page numbers
  6567.         01h use segment addresses
  6568.     DX = handle
  6569.     CX = number of entries in array
  6570.     DS:SI -> mapping array (see below)
  6571. Return: AH = status
  6572.         00h successful
  6573.         80h internal error
  6574.         81h hardware malfunction
  6575.         83h invalid handle
  6576.         84h undefined function requested
  6577.         8Ah one or more logical pages are invalid
  6578.         8Bh one or more physical pages are invalid
  6579.         8Fh invalid subfunction
  6580. SeeAlso: AH=40h
  6581.  
  6582. Format of mapping array entry:
  6583. Offset    Size    Description
  6584.  00h    WORD    logical page number or FFFFh to unmap physical page
  6585.  02h    WORD    physical page number or segment address
  6586. --------m-6751-------------------------------
  6587. INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
  6588.     AH = 51h
  6589.     DX = handle
  6590.     BX = number of pages to be allocated to handle
  6591. Return:    AH = status (00h,80h,81h,83h,84h,87h,88h) (see below)
  6592.     BX = actual number of pages allocated to handle
  6593.  
  6594. Values for status:
  6595.  00h    successful
  6596.  80h    internal error
  6597.  81h    hardware malfunction
  6598.  83h    invalid handle
  6599.  84h    undefined function requested
  6600.  87h    more pages requested than present in system
  6601.  88h    more pages requested than currently available
  6602.  8Fh    undefined subfunction
  6603.  90h    undefined attribute type
  6604.  91h    feature not supported
  6605.  A0h    no such handle name
  6606.  A1h    duplicate handle name
  6607. --------m-6752-------------------------------
  6608. INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
  6609.     AH = 52h
  6610.     AL = subfunction
  6611.         00h get handle attributes
  6612.         Return: AL = attribute
  6613.                 00h handle is volatile
  6614.                 01h handle is nonvolatile
  6615.         01h set handle attributes
  6616.         BL = new attribute (see returned AL)
  6617.         02h get attribute capability
  6618.         Return: AL = attribute capability
  6619.                 00h only volatile handles supported
  6620.                 01h both volatile and non-volatile supported
  6621.     DX = handle
  6622. Return: AH = status (00h,80h,81h,83h,84h,8Fh-91h) (see AH=51h)
  6623. SeeAlso: AH=53h
  6624. --------m-6753-------------------------------
  6625. INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
  6626.     AH = 53h
  6627.     AL = subfunction
  6628.         00h get handle name
  6629.            ES:DI -> 8-byte buffer for handle name
  6630.         01h set handle name
  6631.            DS:SI -> 8-byte handle name
  6632.     DX = handle
  6633. Return: AH = status (00h,80h,81h,83h,84h,8Fh,A1h) (see AH=51h)
  6634. SeeAlso: AH=52h
  6635. --------m-6754-------------------------------
  6636. INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
  6637.     AH = 54h
  6638.     AL = subfunction
  6639.         00h get handle directory
  6640.            ES:DI -> buffer for handle directory (see below)
  6641.         01h search for named handle
  6642.            DS:SI -> 8-byte name
  6643.         02h get total number of handles
  6644. Return: AL = number of entries in handle directory (subfunction 00h)
  6645.     DX = value of named handle (subfunction 01h)
  6646.     BX = total number of handles (subfunction 02h)
  6647.     AH = status (00h,80h,81h,84h,8Fh,A0h,A1h) (see also AH=51h)
  6648.         A1h a handle found had no name
  6649.  
  6650. Format of handle directory entry:
  6651. Offset    Size    Description
  6652.  00h    WORD    handle
  6653.  02h  8 BYTEs    handle's name
  6654. --------m-6755-------------------------------
  6655. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
  6656.     AH = 55h
  6657.     AL = subfunction
  6658.         00h physical page numbers provided by caller
  6659.         01h segment addresses provided by caller
  6660.     DX = handle
  6661.     DS:SI -> structure containing map and jump address
  6662. Return: (at target address unless error)
  6663.     AH = status (see below)
  6664. SeeAlso: AH=56h
  6665.  
  6666. Values for status:
  6667.  00h    successful
  6668.  80h    internal error
  6669.  81h    hardware failure
  6670.  83h    invalid handle
  6671.  84h    undefined function requested
  6672.  8Ah    invalid logical page number encountered
  6673.  8Bh    invalid physical page number encountered
  6674.  8Fh    invalid subfunction
  6675. --------m-6756-------------------------------
  6676. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
  6677.     AH = 56h
  6678.     AL = subfunction
  6679.         00h physical page numbers provided by caller
  6680.         DX = handle
  6681.         DS:SI -> structure containing page map and call address
  6682.         01h segment addresses provided by caller
  6683.         DX = handle
  6684.         DS:SI -> structure containing page map and call address
  6685.         02h get page map stack space required
  6686.         Return: BX = stack space required
  6687. Return: (if successful, the target address is called.  Use a RETF to return and
  6688.      restore mapping context)
  6689.     AH = status (see AH=55h)
  6690. SeeAlso: AH=55h
  6691. --------m-6756FF-----------------------------
  6692. INT 67 - RM386 v6.00 - ???
  6693.     AX = 56FFh
  6694.     DS:SI -> ???
  6695.     ???
  6696. Return: ???
  6697. --------m-6757-------------------------------
  6698. INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
  6699.     AH = 57h
  6700.     AL = subfunction
  6701.         00h move memory region
  6702.         01h exchange memory region
  6703.     DS:SI -> structure describing source and destination (see below)
  6704. Return: AH = status (see below)
  6705. Note:    source and destination may overlap for a move, in which case the copy
  6706.       direction is chosen such that the destination receives an intact copy
  6707.       of the source region
  6708.  
  6709. Values for status:
  6710.  00h    successful
  6711.  80h    internal error
  6712.  81h    hardware failure
  6713.  83h    invalid handle
  6714.  84h    undefined function requested
  6715.  8Ah    invalid logical page number encountered
  6716.  8Fh    undefined subfunction
  6717.  92h    successful, but a portion of the source region has been overwritten
  6718.  93h    length of source or destination region exceeds length of region
  6719.       allocated to either source or destination handle
  6720.  94h    conventional and expanded memory regions overlap
  6721.  95h    offset within logical page exceeds size of logical page
  6722.  96h    region length exceeds 1M
  6723.  97h    source and destination EMS regions have same handle and overlap
  6724.  98h    memory source or destination type undefined
  6725.  A2h    attempted to wrap around 1M conventional address space
  6726.  
  6727. Format of EMS copy data:
  6728. Offset    Size    Description
  6729.  00h    DWORD    region length in bytes
  6730.  04h    BYTE    source memory type
  6731.         00h conventional
  6732.         01h expanded
  6733.  05h    WORD    source handle (0000h if conventional memory)
  6734.  07h    WORD    source initial offset (within page if EMS, segment if convent)
  6735.  09h    WORD    source initial segment (conv mem) or logical page (EMS)
  6736.  0Bh    BYTE    destination memory type
  6737.         00h conventional
  6738.         01h expanded
  6739.  0Ch    WORD    destination handle
  6740.  0Eh    WORD    destination initial offset
  6741.  10h    WORD    destination initial segment or page
  6742. --------m-6758-------------------------------
  6743. INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
  6744.     AH = 58h
  6745.     AL = subfunction
  6746.         00h get mappable physical address array
  6747.         ES:DI -> buffer to be filled with array
  6748.         01h get number of entries in m.p.a. array
  6749. Return: CX = number of entries in array
  6750.     AH = status (00h,80h,81h,84h,8Fh) (see AH=57h)
  6751. Note:    the returned array for subfunction 00h is filled in physical segment
  6752.       address order
  6753.  
  6754. Format of mappable physical address entry:
  6755. Offset    Size    Description
  6756.  00h    WORD    physical page segment
  6757.  02h    WORD    physical page number
  6758. --------m-675857-----------------------------
  6759. INT 67 U - NETROOM??? - ???
  6760.     AX = 5857h
  6761.     BX = function??? (0057h,0059h,0159h seen)
  6762.     ???
  6763. Return: ???
  6764. Note:    BX=0059h appears to be analogous to AX=5800h and BX=0159h appears to
  6765.       be analogous to AX=5801h; BX=0057h appears to indicate whether
  6766.       AX=580xh or AX=5857h/BX=0x59h should be used
  6767. SeeAlso: AX=5BF0h
  6768. --------m-6759-------------------------------
  6769. INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
  6770.     AH = 59h
  6771.     AL = subfunction
  6772.         00h get hardware configuration array
  6773.         ES:DI -> buffer to be filled with array (see below)
  6774.         01h get unallocated raw page count
  6775.         Return: BX = unallocated raw pages
  6776.             DX = total raw pages
  6777. Return: AH = status (see also AH=58h"EMS 4.0")
  6778.         A4h access denied by operating system
  6779. Note:    subfunction 00h is for use by operating systems only, and can be
  6780.       enabled or disabled at any time by the operating system
  6781.  
  6782. Format of hardware configuration array:
  6783. Offset    Size    Description
  6784.  00h    WORD    size of raw EMM pages in paragraphs
  6785.  02h    WORD    number of alternate register sets
  6786.  04h    WORD    size of mapping-context save area in bytes
  6787.  06h    WORD    number of register sets assignable to DMA
  6788.  08h    WORD    DMA operation type
  6789.         0000h DMA with alternate register sets
  6790.         0001h only one DMA register set
  6791. --------m-675A-------------------------------
  6792. INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
  6793.     AH = 5Ah
  6794.     AL = subfunction
  6795.         00h allocate standard pages
  6796.         01h allocate raw pages
  6797.     BX = number of pages to allocate
  6798. Return: DX = handle
  6799.     AH = status
  6800.         00h successful
  6801.         80h internal error
  6802.         81h hardware failure
  6803.         84h undefined function requested
  6804.         85h no more handles available
  6805.         87h insufficient memory pages in system
  6806.         88h insufficient memory pages available
  6807.         8Fh undefined subfunction
  6808. --------m-675B-------------------------------
  6809. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
  6810.     AH = 5Bh
  6811.     AL = subfunction
  6812.         00h get alternate map register set
  6813.         Return: BL = current active alternate map register set number
  6814.             ES:DI -> map register context save area if BL=00h
  6815.         01h set alternate map register set
  6816.         BL = new alternate map register set number
  6817.         ES:DI -> map register context save area if BL=0
  6818.         02h get alternate map save array size
  6819.         Return: DX = array size in bytes
  6820.         03h allocate alternate map register set
  6821.         Return: BL = number of map register set; 00h = not supported
  6822.         04h deallocate alternate map register set
  6823.         BL = number of alternate map register set
  6824. Return: AH = status (00h,80h,81h,84h,8Fh,9Ah-9Dh,A3h,A4h) (see below)
  6825. Note:    this function is for use by operating systems only, and can be
  6826.       enabled or disabled at any time by the operating system
  6827.  
  6828. Values for status:
  6829.  00h    successful
  6830.  80h    internal error
  6831.  81h    hardware malfunction
  6832.  84h    undefined function requested
  6833.  8Fh    undefined subfunction
  6834.  9Ah    specified alternate map register or DMA register set not supported
  6835.  9Bh    all alternate map register or DMA register sets currently allocated
  6836.  9Ch    alternate map register or DMA register sets not supported
  6837.  9Dh    undefined or unallocated alternate map register/DMA register set
  6838.  9Eh    dedicated DMA channels not supported
  6839.  9Fh    specified dedicated DMA channel not supported
  6840.  A3h    source array corrupted
  6841.  A4h    operating system denied access
  6842. --------m-675B-------------------------------
  6843. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
  6844.     AH = 5Bh
  6845.     AL = subfunction
  6846.         05h allocate DMA register set
  6847.         Return: BL = DMA register set number, 00h if not supported
  6848.         06h enable DMA on alternate map register set
  6849.            BL = DMA register set number
  6850.            DL = DMA channel number
  6851.         07h disable DMA on alternate map register set
  6852.            BL = DMA register set number
  6853.         08h deallocate DMA register set
  6854.            BL = DMA register set number
  6855. Return: AH = status (00h,80h,81h,84h,8Fh,9Ah-9Fh,A3h,A4h) (see AH=5Ah)
  6856. Note:    this function is for use by operating systems only, and can be
  6857.       enabled or disabled at any time by the operating system
  6858. --------m-675BE0-----------------------------
  6859. INT 67 - MICEMM v4D, RM386 - GET LINEAR ADDRESS OF MEMORY
  6860.     AX = 5BE0h
  6861.     ES:BX -> memory for which to get linear address
  6862. Return: AH = 00h
  6863.     CX:DX = linear address of physical memory corresponding to ES:BX
  6864. Program: RAM-MAN/386 is the memory manager included with Helix's Netroom;
  6865.       MICEMM is a memory manager for some Micronics motherboards
  6866. Note:    this has been superceded by AX=DE06h, which should be used instead
  6867. SeeAlso: AX=5BF0h,AX=5BF1h,AX=DE06h
  6868. --------m-675BE1-----------------------------
  6869. INT 67 - RM386 v6.00+ - GET MEMORY MANAGER SIZE
  6870.     AX = 5BE1h
  6871. Return: AH = 00h
  6872.     CX = code and data size in bytes
  6873.     DX:BX = physical address of RM386 code
  6874.     DI:SI = total size of RM386 area including handle tables
  6875.     BP = number of additional pages (high DOS, etc.)
  6876. SeeAlso: AX=5BE0h,AX=5BE2h
  6877. --------m-675BE2-----------------------------
  6878. INT 67 - RM386 v6.00+ - GET INTERRUPT VECTORS
  6879.     AX = 5BE2h
  6880. Return: DS:SI -> V86-mode table (see below)
  6881.     ES:BX -> ??? (undoc, middle of device driver interrupt routine!)
  6882. SeeAlso: AX=5BE0h,AX=5BE1h
  6883.  
  6884. Format of V86-mode table:
  6885. Offset    Size    Description
  6886.  00h    DWORD    original INT 13 vector
  6887.  04h    DWORD    original INT 15 vector
  6888.  08h    DWORD    original INT 19 vector
  6889.  0Ch    DWORD    original INT 21 vector
  6890.  10h    DWORD    original INT 4B vector
  6891.  14h    DWORD    original INT 67 vector
  6892. --------m-675BF0-----------------------------
  6893. INT 67 - MICEMM v4D, RM386 - INSTALLATION CHECK
  6894.     AX = 5BF0h
  6895. Return: AH = 00h if MICEMM or RM386 present
  6896.         BX = code segment of driver
  6897. Program: MICEMM is the Micronics Expanded Memory Manager; RM386 is the memory
  6898.       manager included in Helix Software's Netroom
  6899. SeeAlso: AH=3Fh,AX=5BE0h,AX=5BF1h
  6900. --------m-675BF1-----------------------------
  6901. INT 67 - MICEMM v4D, RM386 - GET ADDRESS MAP
  6902.     AX = 5BF1h
  6903.     ES:BX -> 256-byte (MICEMM) or 512-byte (RM386) buffer for memory types
  6904. Return: AH = 00h
  6905.     ES:BX buffer filled
  6906. Note:    each byte in the buffer specifies the type of a 4K page of memory
  6907. SeeAlso: AX=5BE0h,AX=5BF0h
  6908.  
  6909. Values for memory type:
  6910.  00h    unused (MICEMM), RAM/available (RM386)
  6911.  02h    DOS extension (XMS UMB)
  6912.  04h    shadowed ROM
  6913.  08h    mappable EMS
  6914.  10h    page frame
  6915.  20h    ROM
  6916.  40h    reserved (video memory, etc)
  6917.  80h    RAM (MICEMM), Windows UMB (RM386)
  6918. --------m-675BF2-----------------------------
  6919. INT 67 - RM386 - GET RM386 INTERNAL DATA
  6920.     AX = 5BF2h
  6921.     CX = size of buffer
  6922.     DS:SI -> buffer for internal data
  6923.     (documentation says ES:BX -> buffer, SI = offset within RM386)
  6924. Return: buffer filled
  6925. Note:    the data returned by this function is release-specific
  6926. SeeAlso: AX=5BF0h
  6927. --------m-675BF3-----------------------------
  6928. INT 67 - RM386 - RETURN TO REAL MODE
  6929.     AX = 5BF3h
  6930. Return: nothing
  6931. Note:    use AX=5DE0h instead of this functin
  6932. SeeAlso: AX=5BF0h,AX=5DE0h
  6933. --------m-675BF4-----------------------------
  6934. INT 67 - RM386 v6.00 - GET RM386 GLOBAL FLAGS
  6935.     AX = 5BF4h
  6936. Return: AH = 00h
  6937.     BX = global flags 1 (see below)
  6938.     CX = global flags 2 (see below)
  6939.     DX = global flags 3 (see below)
  6940.     SI = global flags 4 (see below)
  6941. SeeAlso: AX=5BF0h
  6942.  
  6943. Bitfields for global flags 1:
  6944.  bits 0-3 reserved
  6945.  bit 4    V86 mode
  6946.  bit 5    reserved
  6947.  bit 6    80386 or higher CPU
  6948.  bits 7,8 reserved
  6949.  bit 9    A20 enabled at startup
  6950.  bit 10 "HIGH_IO"
  6951.  bit 11 ROM
  6952.  bit 12 large frame
  6953.  bits 13,14 reserved
  6954.  bit 15 PS/2-style A20 control
  6955.  
  6956. Bitfields for global flags 2:
  6957.  bit 0    HMA in use
  6958.  bit 1    XMS present
  6959.  bit 2    using XMS driver memory
  6960.  bit 3    HIGH (NEAT only)
  6961.  bits 4-7 reserved
  6962.  bit 8    NOBKTRAP
  6963.  bit 9    NORESET
  6964.  bit 10 ALTMAP
  6965.  bit 11 NOFRAME
  6966.  bits 12-15 reserved
  6967.  
  6968. Bitfields for global flags 3:
  6969.  bit 0    NOTEST
  6970.  bit 1    NOEBDA
  6971.  bit 2    Windows3 support
  6972.  bit 3    system board mouse
  6973.  bit 4    DISKBUF
  6974.  bit 5    EBDALOW
  6975.  bit 6    A20 global enable flag
  6976.  bit 7    A20 flag
  6977.  bit 8    EBDA moved to stub
  6978.  bit 9    VXD file was found
  6979.  bit 10 reserved
  6980.  bit 11 NOBOOTMAP
  6981.  bit 12 AUTO
  6982.  bit 13 PS/2 machine
  6983.  bit 14 Compaq ROM merge active
  6984.  bit 15 NOHMA set
  6985.  
  6986. Bitfields for global flags 4:
  6987.  bit 0    "NOV8259" don't virtualize interrupt controller
  6988.  bit 1    NOSCSI
  6989.  bit 2    NOSCAN
  6990.  bit 3    NOTR
  6991.  bit 4    ALTBOOT
  6992.  bit 5    NOCOMPQ
  6993.  bit 6    KB2TRAP
  6994.  bit 7    DESHADOW
  6995.  bit 8    Video 7 VGA detected
  6996.  bit 9    reserved
  6997.  bit 10 NOVGA
  6998.  bit 11 NOPS2
  6999.  bit 12 DEBUG
  7000.  bit 13 NOVKB
  7001.  bits 14,15 reserved
  7002. --------m-675BF5-----------------------------
  7003. INT 67 - RM386 v6.00 - GET RM386 EMS HANDLE COUNT
  7004.     AX = 5BF5h
  7005. Return: AH = status
  7006.         00h successful
  7007.         BX = current number of allocated EMS handles
  7008.         84h function not available
  7009. SeeAlso: AX=5BF0h
  7010. --------m-675C-------------------------------
  7011. INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
  7012.     AH = 5Ch
  7013. Return: AH = status (see below)
  7014.  
  7015. Values for status:
  7016.  00h    successful
  7017.  80h    internal error
  7018.  81h    hardware malfunction
  7019.  84h    undefined function requested
  7020. --------m-675D-------------------------------
  7021. INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
  7022.     AH = 5Dh
  7023.     AL = subfunction
  7024.         00h enable OS Function Set
  7025.         01h disable OS Function Set
  7026.         02h return access key (resets memory manager, returns access key at
  7027.         next invocation)
  7028.     BX,CX = access key returned by first invocation
  7029. Return: BX,CX = access key, returned only on first invocation of function
  7030.     AH = status (see also AH=5Ch)
  7031.         8Fh undefined subfunction
  7032.         A4h operating system denied access
  7033. --------m-675D03-----------------------------
  7034. INT 67 u - Nanosoft MD386 - INTERNAL INITIALIZATION
  7035.     AX = 5D03h
  7036.     ???
  7037. Return: ???
  7038. Program: MD386 is a subset EMS memory manager by Nanosoft specifically designed
  7039.       for use with the MultiDOS Plus multitasker
  7040. SeeAlso: AX=5D04h,AX=5E00h
  7041. --------m-675D04-----------------------------
  7042. INT 67 - Nanosoft MD386 - GET ALTERNATE MAP STRUCTURE
  7043.     AX = 5D04h
  7044.     BX = alternate register set number
  7045.     ES:DI -> 1024-byte buffer for map structure
  7046. Return: AH = status (see AH=40h)
  7047.     buffer filled if AH=00h
  7048. Note:    used for debugging purposes
  7049. SeeAlso: AX=5D05h
  7050. --------m-675D05-----------------------------
  7051. INT 67 - Nanosoft MD386 - GET INTERNAL HANDLE TABLE
  7052.     AX = 5D05h
  7053.     BX = handle number
  7054.     ES:DI -> 1024-byte buffer for handle table
  7055. Return: AH = status (see AH=40h)
  7056.     buffer filled if AH=00h
  7057. Note:    used for debugging purposes
  7058. SeeAlso: AX=5D04h
  7059. --------m-675DE0-----------------------------
  7060. INT 67 - RM386 - DISABLE RM386
  7061.     AX = 5DE0h
  7062. Note:    RM386 traps this functions on the initial transition to protected
  7063.       mode caused by the INT instruction, which means it can not be
  7064.       overridden simply by hooking the interrupt
  7065. SeeAlso: AX=5DE1h
  7066. --------m-675DE1-----------------------------
  7067. INT 67 - RM386 - ENABLE RM386
  7068.     AX = 5DE1h
  7069. Note:    RM386 traps this functions on the initial transition to protected
  7070.       mode caused by the INT instruction, which means it can not be
  7071.       overridden simply by hooking the interrupt
  7072. SeeAlso: AX=5DE0h
  7073. --------m-675DE2-----------------------------
  7074. INT 67 - RM386 - GET PAGE TABLE
  7075.     AX = 5DE2h
  7076.     ES:DI -> 1088-byte buffer for page table
  7077. Return: ES:DI buffer filled
  7078. Note:    RM386 traps this functions on the initial transition to protected
  7079.       mode caused by the INT instruction, which means it can not be
  7080.       overridden simply by hooking the interrupt
  7081. SeeAlso: AX=5DE3h
  7082. --------m-675DE3-----------------------------
  7083. INT 67 - RM386 - SET PAGE TABLE
  7084.     AX = 5DE3h
  7085.     ES:DI -> 1088-byte buffer containing page table
  7086. Notes:    only the access bits of the page table are used, the remainder is
  7087.       ignored
  7088.     RM386 traps this functions on the initial transition to protected
  7089.       mode caused by the INT instruction, which means it can not be
  7090.       overridden simply by hooking the interrupt
  7091. SeeAlso: AX=5DE2h
  7092. --------m-675DE4-----------------------------
  7093. INT 67 - RM386 - SET WRITE-PROTECTION FOR PAGE IN FIRST MEGABYTE
  7094.     AX = 5DE4h
  7095.     BL = page number
  7096.     BH = access (00h read-only, 01h read-write)
  7097. Note:    RM386 traps this functions on the initial transition to protected
  7098.       mode caused by the INT instruction, which means it can not be
  7099.       overridden simply by hooking the interrupt
  7100. --------m-675DE5-----------------------------
  7101. INT 67 - RM386 - MAP PHYSICAL PAGE TO PHYSICAL SEGMENT
  7102.     AX = 5DE5h
  7103.     EBX = physical page number
  7104.     DX = page number in first megabyte to be remapped (linear-addr SHR 12)
  7105. Return: AH = status
  7106.         00h successful
  7107.         8Bh invalid destination page (not in first megabyte)
  7108. Note:    RM386 traps this functions on the initial transition to protected
  7109.       mode caused by the INT instruction, which means it can not be
  7110.       overridden simply by hooking the interrupt
  7111. SeeAlso: AX=5DE6h
  7112. --------m-675DE6-----------------------------
  7113. INT 67 - RM386 - MAP LOGICAL 4K PAGE TO PHYSICAL SEGMENT
  7114.     AX = 5DE6h
  7115.     BX = logical page number in 4K pages from beginning of memory for EMS
  7116.         handle
  7117.     CX = segment in first megabyte to be remapped
  7118.     DX = previously-allocated EMS handle
  7119. Return: AH = status
  7120.         00h successful
  7121.         83h invalid handle
  7122.         8Ah invalid logical page (out of handle's range)
  7123.         8Bh invalid destination page (not in first megabyte)
  7124. Note:    RM386 traps this functions on the initial transition to protected
  7125.       mode caused by the INT instruction, which means it can not be
  7126.       overridden simply by hooking the interrupt
  7127. SeeAlso: AX=5DE5h
  7128. --------m-675DE7-----------------------------
  7129. INT 67 - RM386 - SET PAGE TABLE BITS FOR RANGE OF PAGES
  7130.     AX = 5DE7h
  7131.     BL = page table bits to be set (bits 2-0 = U/S, R/W, P)
  7132.     CX = number of pages to set
  7133.     DX = first page number to set (in first megabyte)
  7134. Return: AH = status
  7135.         00h successful
  7136.         8Bh invalid destination page (not in first megabyte)
  7137.         A5h invalid page bits
  7138.         A6h invalid page count (overflows first megabyte)
  7139. Note:    RM386 traps this functions on the initial transition to protected
  7140.       mode caused by the INT instruction, which means it can not be
  7141.       overridden simply by hooking the interrupt
  7142. --------m-675DE8-----------------------------
  7143. INT 67 - RM386 - GET PARTIAL PAGE TABLE
  7144.     AX = 5DE8h
  7145.     BX = starting page number in first megabyte+HMA (0000h-010Fh)
  7146.     CX = number of page table entries to get
  7147.     ES:DI -> buffer for DWORD page table entries
  7148. Return: AH = status (00h successful, 8Bh invalid page)
  7149. Note:    RM386 traps this functions on the initial transition to protected
  7150.       mode caused by the INT instruction, which means it can not be
  7151.       overridden simply by hooking the interrupt
  7152. SeeAlso: AX=5DE9h
  7153. --------m-675DE9-----------------------------
  7154. INT 67 - RM386 - SET PARTIAL PAGE TABLE
  7155.     AX = 5DE9h
  7156.     BX = starting page number in first megabyte+HMA (0000h-010Fh)
  7157.     CX = number of page table entries to get
  7158.     DS:SI -> buffer of DWORD page table entries
  7159. Return: AH = status (00h successful, 8Bh invalid destination page)
  7160. Note:    RM386 traps this functions on the initial transition to protected
  7161.       mode caused by the INT instruction, which means it can not be
  7162.       overridden simply by hooking the interrupt
  7163. SeeAlso: AX=5DE8h
  7164. --------m-675DEA-----------------------------
  7165. INT 67 - RM386 - V86-MODE I/O PORT TRAPPING CONTROL
  7166.     AX = 5DEAh
  7167.     BX = function
  7168.         00h globally disable V86-mode trapping
  7169.         01h globally enable V86-mode trapping
  7170.         CL = interrupt to use for trapping
  7171.         02h get I/O trapping state
  7172. Return: AH = status
  7173.         00h successful
  7174.         BX = current trapping state (function 02h)
  7175.             0000h disabled, 0001h enabled
  7176.         CX = interrupt used as trap interrupt (functions 00h and 02h)
  7177. Notes:    RM386 traps this functions on the initial transition to protected
  7178.       mode caused by the INT instruction, which means it can not be
  7179.       overridden simply by hooking the interrupt
  7180.     when I/O trapping is enabled and I/O port access occurs, RM386
  7181.       simulates an INT instruction for the specified interrupt; the
  7182.       interrupt handler is responsible for decoding the trapped instruction
  7183.       and performing the appropriate action.  INT 2C/AX=002Dh provides a
  7184.       similar but more-easily used interface.
  7185. SeeAlso: AX=5DEBh,AH=EFh"RM386",INT 2C/AX=002Dh
  7186. --------m-675DEB-----------------------------
  7187. INT 67 - RM386 - V86-MODE I/O TRAPPING PORT CONTROL
  7188.     AX = 5DEBh
  7189.     BX = function
  7190.         00h disable V86-mode trapping for specified port
  7191.         01h enable V86-mode trapping for specified port
  7192.         02h get V86-mode trapping state for specified port
  7193.     DX = port for which to enable/disable/query trapping
  7194. Return: AH = status
  7195.         00h successful
  7196.         BX = current trapping state (00h off, 01h on) (function 02)
  7197.         A7h invalid port ID
  7198.         A8h reserved port--cannot trap/untrap (DMA/INT/KBD controllers)
  7199. Notes:    RM386 traps this functions on the initial transition to protected
  7200.       mode caused by the INT instruction, which means it can not be
  7201.       overridden simply by hooking the interrupt
  7202. SeeAlso: AX=5DEAh
  7203. --------m-675DFD-----------------------------
  7204. INT 67 U - RM386 v6.00 - ???
  7205.     AX = 5DFDh
  7206.     ???
  7207. Return: ???
  7208. Note:    RM386 traps this function on the initial transition to protected
  7209.       mode caused by the INT instruction, which means it can not be
  7210.       overridden simply by hooking the interrupt
  7211. SeeAlso: AX=5DFEh
  7212. --------m-675DFE-----------------------------
  7213. INT 67 U - RM386 v6.00 - ???
  7214.     AX = 5DFEh
  7215.     ???
  7216. Return: ???
  7217. Note:    RM386 traps this function on the initial transition to protected
  7218.       mode caused by the INT instruction, which means it can not be
  7219.       overridden simply by hooking the interrupt
  7220. SeeAlso: AX=5DFDh
  7221. --------m-675DFF-----------------------------
  7222. INT 67 U - RM386 v6.00 - ???
  7223.     AX = 5DFFh
  7224.     ???
  7225. Return: ???
  7226. Note:    RM386 traps this function on the initial transition to protected
  7227.       mode caused by the INT instruction, which means it can not be
  7228.       overridden simply by hooking the interrupt
  7229. SeeAlso: AX=5DFDh,AX=5DFEh
  7230. --------m-675E00-----------------------------
  7231. INT 67 - Nanosoft MD386 - SET HARDWARE BREAKPOINT
  7232.     AX = 5E00h
  7233.     DH = breakpoint number (0-3)
  7234.     DL = breakpoint attributes (used to set DR7)
  7235.     CX:BX = linear address of breakpoint
  7236. SeeAlso: AX=5D03h,AX=5E01h
  7237. --------m-675E01-----------------------------
  7238. INT 67 - Nanosoft MD386 - GET HARDWARE DEBUG REGISTER
  7239.     AX = 5E01h
  7240.     BL = register number (0-3,7)
  7241. Return: CX:BX = value of specified DRx register
  7242. SeeAlso: AX=5E00h
  7243. --------m-675E02-----------------------------
  7244. INT 67 - Nanosoft MD386 - SET DEBUG EXCEPTION HANDLER
  7245.     AX = 5E02h
  7246.     CX:BX -> exception handler
  7247. Note:    the specified exception handler is called with a simulated interrupt
  7248.       whenever a debug exception occurs which was caused by a hardware
  7249.       breakpoint set with the debug registers
  7250. SeeAlso: AX=5E04h,AX=5E05h
  7251. --------m-675E03-----------------------------
  7252. INT 67 - Nanosoft MD386 - ENABLE/DISABLE MEMORY WRITE PROTECTION
  7253.     AX = 5E03h
  7254.     BL = register map set number
  7255.     BH = new state (00h read-only, else read-write)
  7256.     CX = linear page number (linear address SHR 12)
  7257. Note:    setting write protection in map set 0 will cause the setting to become
  7258.       the default for newly-allocated map sets
  7259. --------m-675E04-----------------------------
  7260. INT 67 - Nanosoft MD386 - GET DEBUG EXCEPTION
  7261.     AX = 5E04h
  7262. Return: BL = debug exception (low byte of DR6 register)
  7263. SeeAlso: AX=5E02h,AX=5E05h
  7264. --------m-675E05-----------------------------
  7265. INT 67 - Nanosoft MD386 - IGNORE NEXT DEBUG EXCEPTION
  7266.     AX = 5E05h
  7267. Note:    may be required when using AX=5E02h for handling instruction
  7268.       breakpoints
  7269. SeeAlso: AX=5E02h,AX=5E04h
  7270. --------m-6760-------------------------------
  7271. INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
  7272.     AH = 60h
  7273.     ES:DI -> buffer
  7274. Return: AH = status (see also AH=40h)
  7275.     AL = number of entries
  7276.     buffer at ES:DI filled
  7277. --------m-6761-------------------------------
  7278. INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
  7279.     AH = 61h
  7280.     ???
  7281. Return: ???
  7282. Note:    can be used by accelerator card manufacturer to flush RAM cache,
  7283.       ensuring that the cache accurately reflects what the processor would
  7284.       see without the cache.
  7285. --------m-6768-------------------------------
  7286. INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
  7287.     AH = 68h
  7288.     ES:DI -> buffer
  7289. Return: AH = status (see also AH=40h)
  7290.     AL = number of entries
  7291.     buffer at ES:DI filled
  7292. Note:    equivalent to LIM 4.0 function 58h
  7293. --------m-6769-------------------------------
  7294. INT 67 - EEMS - MAP PAGE INTO FRAME
  7295.     AH = 69h
  7296.     AL = frame number
  7297.     BX = page number
  7298.     DX = handle
  7299. Return: AH = status (see also AH=40h)
  7300. Note:    similar to EMS function 44h
  7301. SeeAlso: AH=44h,AH=50h,AH=6Ah
  7302. --------m-676A-------------------------------
  7303. INT 67 - EEMS - PAGE MAPPING
  7304.     AH = 6Ah
  7305.     AL = subfunction
  7306.         00h save partial page map
  7307.         CH = first page frame
  7308.         CL = number of frames
  7309.         ES:DI -> buffer which is to be filled
  7310.         01h restore partial page map
  7311.         CH = first page frame
  7312.         CL = number of frames
  7313.         DI:SI -> previously saved page map
  7314.         02h save and restore partial page map
  7315.         CH = first page frame
  7316.         CL = number of frames
  7317.         ES:DI = buffer for current page map
  7318.         DI:SI = new page map
  7319.         03h get size of save array
  7320.         CH = first page frame
  7321.         CL = number of frames
  7322.         Return: AL = size of array in bytes
  7323.         04h switch to standard map register setting
  7324.         05h switch to alternate map register setting
  7325.         06h deallocate pages mapped to frames in conventional memory
  7326.         CH = first page frame
  7327.         CL = number of frames
  7328. Return: AH = status (see also AH=40h)
  7329. Note:    similar to EMS function 4Eh, except that a subrange of pages can be
  7330.       specified
  7331. SeeAlso: AH=69h
  7332. --------m-676B-------------------------------
  7333. INT 67 - DESQview 2.42-2.53 - BUG
  7334.     AH = 6Bh
  7335. Note:    the EMM.DVR portion of DESQview branches to a random location on this
  7336.       function due to a fencepost error
  7337. --------m-67DD-------------------------------
  7338. INT 67 - Quadtel QMAPS - API
  7339.     AH = DDh
  7340.     AL = function
  7341.     ???
  7342. Return: ???
  7343. Notes:    details are not yet available
  7344.     Hewlett-Packard's HPMM.SYS is a licensed version of QMAPS, and thus
  7345.       supports this API
  7346. SeeAlso: AH=3Fh,AX=FFA5h
  7347. --------E-67DE00-----------------------------
  7348. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  7349.     AX = DE00h
  7350. Return: AH = 00h    VCPI is present
  7351.         BH = major version number
  7352.         BL = minor version number
  7353.     AH nonzero  VCPI not present
  7354. BUG:    MS Windows 3.00 is reported to "object violently" to this call.
  7355. SeeAlso: INT 2F/AX=1687h
  7356. --------E-67DE01-----------------------------
  7357. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  7358.     AX = DE01h
  7359.     ES:DI -> 4K page table buffer
  7360.     DS:SI -> three descriptor table entries in GDT
  7361.         first becomes code segment descriptor, other two for use by
  7362.         main control program
  7363. Return: AH = 00h successful
  7364.         DI -> first unused page table entry in buffer
  7365.         EBX -> protected mode entry point in code segment
  7366.     AH = nonzero  failed
  7367. Note:    protected mode entry point may be called with AX=DE00h-DE05h and
  7368.       AX=DE0Ch (in each case, all other registers as appropriate for
  7369.       the function)
  7370. SeeAlso: INT 2F/AX=1687h,INT 67/AH=3Fh
  7371.  
  7372. QEMM v6.03 protected mode entry point may also be called with:
  7373.     AX = DF00h ???
  7374.         ???
  7375.         Return: ???
  7376.     AX = DF01h ???
  7377.         ???
  7378.         Return: ???
  7379. --------E-67DE02-----------------------------
  7380. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  7381.     AX = DE02h
  7382. Return: AH = 00h  successful
  7383.         EDX = physical address of highest 4K memory page
  7384.     AH nonzero: failed
  7385. SeeAlso: AH=3Fh
  7386. --------E-67DE03-----------------------------
  7387. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  7388.     AX = DE03h
  7389. Return: AH = 00h  successful
  7390.         EDX = number of free 4K pages
  7391.     AH nonzero: failed
  7392. Notes:    returns total number of pages available to ALL tasks in system
  7393.     also available in protected mode by calling the protected-mode VCPI
  7394.       entry point
  7395. SeeAlso: AX=DE04h
  7396. --------E-67DE04-----------------------------
  7397. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  7398.     AX = DE04h
  7399. Return: AH = 00h successful
  7400.         EDX = physical address of allocated page
  7401.     AH nonzero: failed
  7402. Notes:    the client program is responsible for freeing all memory allocated
  7403.       with this call before terminating
  7404.     also available in protected mode by calling the protected-mode VCPI
  7405.       entry point
  7406. SeeAlso: AH=3Fh,AX=DE03h,AX=DE05h
  7407. --------E-67DE05-----------------------------
  7408. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  7409.     AX = DE05h
  7410.     EDX = physical address of 4K page
  7411. Return: AH = 00h successful
  7412.     AH nonzero: failed
  7413. Note:    also available in protected mode by calling the protected-mode VCPI
  7414.       entry point
  7415. SeeAlso: AH=3Fh,AX=DE04h
  7416. --------E-67DE06-----------------------------
  7417. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  7418.     AX = DE06h
  7419.     CX = page number (linear address shifted right 12 bits)
  7420. Return: AH = 00h successful
  7421.         EDX = physical address of page
  7422.     AH nonzero: invalid page number (AH = 8Bh recommended)
  7423. SeeAlso: AX=5BE0h
  7424. --------E-67DE07-----------------------------
  7425. INT 67 - Virtual Control Program Interface - READ CR0
  7426.     AX = DE07h
  7427. Return: AH = 00h
  7428.     EBX = value of Control Register 0
  7429. SeeAlso: AH=3Fh,AX=DE07h
  7430. --------E-67DE08-----------------------------
  7431. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  7432.     AX = DE08h
  7433.     ES:DI -> array of 8 DWORDs
  7434. Return: AH = 00h
  7435.     buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  7436. SeeAlso: AH=3Fh,AX=DE09h
  7437. --------E-67DE09-----------------------------
  7438. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  7439.     AX = DE09h
  7440.     ES:DI -> array of 8 DWORDs holding new values of debug registers
  7441. Return: AH = 00h
  7442. Note:    values for DR4 and DR5 ignored
  7443. SeeAlso: AH=3Fh,AX=DE08h
  7444. --------E-67DE0A-----------------------------
  7445. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  7446.     AX = DE0Ah
  7447. Return: AH = 00h successful
  7448.         BX = first vector used by master 8259 (IRQ0)
  7449.         CX = first vector used by slave 8259 (IRQ8)
  7450.     AH nonzero: failed
  7451. Note:    CX is undefined in systems without a slave 8259
  7452. SeeAlso: AX=DE0Bh,INT 21/AX=250Ch,INT 31/AX=0400h
  7453. --------E-67DE0B-----------------------------
  7454. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  7455.     AX = DE0Bh
  7456.     BX = first vector used by master 8259
  7457.     CX = first vector used by slave 8259
  7458.     interrupts disabled
  7459. Return: AH = 00h successful
  7460.     AH nonzero: failed
  7461. Notes:    This call merely informs the server that the client has changed the
  7462.       interrupt mappings.  The client may not change the mappings if they
  7463.       have already been changed by the server or another client, and is
  7464.       responsible for restoring the original mappings before terminating.
  7465. SeeAlso: AX=DE0Ah,INT 2C/AX=002Ah
  7466. --------E-67DE0C-----------------------------
  7467. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  7468.     AX = DE0Ch
  7469.     ESI = linear address in first megabyte of values for system registers
  7470.     interrupts disabled
  7471. Return: interrupts disabled
  7472.     GDTR, IDTR, LDTR, TR loaded
  7473.     SS:ESP must have at least 16 bytes space, and the entry point is
  7474.         required to set up a new stack before enabling interrupts
  7475.     EAX, ESI, DS, ES, FS, GS destroyed
  7476. SeeAlso: AH=3Fh,INT 15/AH=89h,INT 38/AH=10h
  7477.  
  7478. Note:    in protected mode, calling the protected-mode VCPI entry point with
  7479.       AX = DE0Ch
  7480.       DS = segment selector mapping entire linear address space obtained
  7481.         via AX=DE01h
  7482.       SS:ESP in first megabyte of linear memory
  7483.       STACK:QWORD  return address from FAR call to 32-bit segment
  7484.         DWORD  EIP
  7485.         DWORD  CS
  7486.         DWORD  reserved for EFLAGS
  7487.         DWORD  ESP
  7488.         DWORD  SS
  7489.         DWORD  ES
  7490.         DWORD  DS
  7491.         DWORD  FS
  7492.         DWORD  GS
  7493.       and interrupts disabled, will switch to virtual86 mode with
  7494.       interrupts disabled, all segment registers loaded, and EAX destroyed.
  7495.  
  7496. Format of system register values for switch to protected mode:
  7497. Offset    Size    Description
  7498.  00h    DWORD    value for CR3
  7499.  04h    DWORD    linear address in first megabyte of value for GDTR
  7500.  08h    DWORD    linear address in first megabyte of value for IDTR
  7501.  0Ch    WORD    value for LDTR
  7502.  0Eh    WORD    value for TR
  7503.  10h    PWORD    CS:EIP of protected mode entry-point
  7504. --------m-67DE0F-----------------------------
  7505. INT 67 - Netroom3 - ???
  7506.     AX = DE0Fh
  7507.     ???
  7508. Return: ???
  7509. Note:    called by Netroom's DPMI.EXE
  7510. --------m-67EF-------------------------------
  7511. INT 67 - RM386 v6.00+ - EXECUTE XMS FUNCTION
  7512.     AH = EFh
  7513.     AL = function (00h-12h,80h-8Fh)
  7514.     other register as appropriate for XMS function
  7515. Return: varies by function (see INT 2F/AX=4310h)
  7516. Note:    these functions appear to be equivalent to the XMS functions with the
  7517.       same numbers
  7518. SeeAlso: AH=5Dh"RM386",INT 2F/AX=4310h
  7519. --------m-67FFA5-----------------------------
  7520. INT 67 - Microsoft EMM386.EXE v4.20+ - INSTALLATION CHECK
  7521.     AX = FFA5h
  7522. Return: AX = 845Ah if loaded
  7523.         BX:CX -> API entry point
  7524. Notes:    this call is available even if EMM386 is not providing EMS
  7525.     if no other program has hooked INT 67, an alternate installation
  7526.       check is to test for the string
  7527.       "MICROSOFT EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  7528.       handler's segment; the word immediately preceding this string
  7529.       contains the offset of the API entry point
  7530. SeeAlso: AH=3Fh,AX=FFA5h/BX=4345h,INT 21/AX=4402h"EMM386.EXE"
  7531.  
  7532. Call API entry point with:
  7533.     AH = 00h get memory manager's status
  7534.         Return: AH = status
  7535.             bit 0: not active (OFF)
  7536.             bit 1: in "Auto" mode
  7537.     AH = 01h set memory manager's state
  7538.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  7539.     AH = 02h Weitek coprocessor support
  7540.         AL = subfunction
  7541.         00h get Weitek support state
  7542.             Return: AL = status
  7543.                 bit 0: Weitek coprocessor is present
  7544.                 bit 1: Weitek support is enabled
  7545.         01h turn on Weitek support
  7546.         02h turn off Weitek support
  7547.      --- v4.20-4.41 only ---
  7548.     AH = 03h Windows support???
  7549.         AL = subfunction (00h, 01h)
  7550.     AH = 04h print copyright notice to standard output
  7551.          (using INT 21/AH=09h)
  7552.     AH = 05h print available report
  7553.          (the one shown when running EMM386 from the DOS prompt)
  7554. --------m-67FFA5BX4345-----------------------
  7555. INT 67 U - Compaq CEMM v5.10+ - PRIVATE API
  7556.     AX = FFA5h
  7557.     BX = 4345h ("CE")
  7558.     DX = subfunction
  7559.         0000h unshadow video ROM???
  7560.         0001h shadow video ROM???
  7561.         0002h map pages
  7562.         CX = number of pages (00h=one)
  7563.         ESI = linear address of first page to map into address space
  7564.         EDI = linear starting address at which pages are to be visible
  7565.         0003h get ???
  7566.         Return: DX = ??? (0-2)
  7567.         0004h BUG: crashes system due to fencepost error
  7568. Return: AH = 84h
  7569.     AL = status (84h = error, FFh = success)
  7570. Note:    if BX <> 4345h or DX > 0004h on entry, CEMM behaves identically to
  7571.       Microsoft's EMM386 (see AX=FFA5h"EMM386")
  7572. SeeAlso: AX=FFA5h"EMM386"
  7573. --------I-68---------------------------------
  7574. INT 68 - Sangoma CCPOP 3270 resident module
  7575. SeeAlso: INT 67"Sangoma",INT 92"Sangoma"
  7576. --------N-6801--SF1B00-----------------------
  7577. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - DISPLAY
  7578.     AH = 01h subfn 1B00h
  7579.     DS:DX -> control block
  7580. Return: control block updated
  7581. SeeAlso: AH=01h/SF=2000h,AH=01h/SF=2B00h
  7582.  
  7583. Format of control block:
  7584. Offset    Size    Description
  7585.  00h 12 BYTEs    reserved
  7586.  0Ch    WORD    1B00h (verb "DISPLAY")
  7587.  0Eh  6 BYTEs    00h
  7588.  14h    DWORD    (big-endian) return code (see below)
  7589.  18h    WORD    00h
  7590.  1Ah  8 BYTEs    (big-endian) logical unit ID
  7591.  22h  8 BYTEs    (big-endian) partner logical unit name
  7592.  2Ah  8 BYTEs    (big-endian) mode name
  7593.  32h    BYTE    logical unit session limit
  7594.  33h    BYTE    partner logical unit session limit
  7595.  34h    BYTE    node maximum negotiable session limit
  7596.  35h    BYTE    current session limit
  7597.  36h    BYTE    minimum negotiated winner limit
  7598.  37h    BYTE    maximum negotiated loser limit
  7599.  38h    BYTE    active session count
  7600.  39h    BYTE    active CONWINNER session count
  7601.  3Ah    BYTE    active CONLOSER session count
  7602.  3Bh    BYTE    session termination count
  7603.  3Ch    BYTE    bit 7: SESSION_TERMINATION_TARGET_DRAIN
  7604.         bit 6: SESSION_TERMINATION_SOURCE_DRAIN
  7605.  
  7606. Values for return code:
  7607.  0000h    successful
  7608.  0001h    BAD_TP_ID
  7609.  0002h    BAD_CONV_ID
  7610.  0003h    bad logical unit ID
  7611.  0008h    no physical unit attached
  7612.  0110h    bad state
  7613.  01B1h    BAD_PART_LUNAME
  7614.  01B2h    bad mode name
  7615.  0201h    physical unit already active
  7616.  0211h    logical unit already active
  7617.  0212h    BAD_PART_SESS
  7618.  0213h    BAD_RU_SIZES
  7619.  0214h    BAD_MODE_SESS
  7620.  0216h    BAD_PACING_CNT
  7621.  0219h    EXTREME_RUS
  7622.  021Ah    SNASVCMG_1
  7623.  0223h    SSCP_CONNECTED_LU
  7624.  0230h    invalid change
  7625.  0243h    too many TPs
  7626.  0272h    adapter close failure
  7627.  0281h    GET_ALLOC_BAD_TYPE
  7628.  0282h    unsuccessful
  7629.  0283h    DLC failure
  7630.  0284h    unrecognized DLC
  7631.  0286h    duplicate DLC
  7632.  0301h    SSCP_PU_SESSION_NOT_ACTIVE
  7633.  0302h    data exceeds RU size
  7634.  0401h    invalid direction
  7635.  0402h    invalid type
  7636.  0403h    segment overlap
  7637.  0404h    invalid first character
  7638.  0405h    table error
  7639.  0406h    conversion error
  7640.  F0010000h    APPC disabled
  7641.  F0020000h    APPC busy
  7642.  F0030000h    APPC abended
  7643.  F0040000h    incomplete
  7644. --------N-6801--SF2000-----------------------
  7645. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - ATTACH PHYSICAL UNIT
  7646.     AH = 01h subfn 2000h
  7647.     DS:DX -> control block
  7648. Return: control block updated
  7649. SeeAlso: AH=01h/SF=2100h,AH=01h/SF=2B00h
  7650.  
  7651. Format of control block:
  7652. Offset    Size    Description
  7653.  00h 12 BYTEs    reserved
  7654.  0Ch    WORD    2000h (verb "Attach Physical Unit")
  7655.  0Eh  6 BYTEs    00h
  7656.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  7657.  18h    WORD    00h
  7658.  1Ah    BYTE    version
  7659.  1Bh    BYTE    release
  7660.  1Ch  8 BYTEs    (big-endian) net name
  7661.  24h  8 BYTEs    (big-endian) physical unit name
  7662.  2Ch  8 BYTEs    00h
  7663.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  7664.         (see also AH=01h/SF=2100h)
  7665.  38h    DWORD    00h
  7666.  3Ch    BYTE    00h RETURN_CONTROL: COMPLETE
  7667.         01h RETURN_CONTROL: INCOMPLETE
  7668. --------N-6801--SF2100-----------------------
  7669. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - ATTACH LOGICAL UNIT
  7670.     AH = 01h subfn 2100h
  7671.     DS:DX -> control block
  7672. Return: control block updated
  7673. SeeAlso: AH=01h/SF=2000h,AH=01h/SF=2200h,AH=01h/SF=2B00h
  7674.  
  7675. Format of control block:
  7676. Offset    Size    Description
  7677.  00h 12 BYTEs    reserved
  7678.  0Ch    WORD    2100h (verb "Attach Logical Unit")
  7679.  0Eh  6 BYTEs    00h
  7680.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  7681.  18h    WORD    70  offset to partner logical unit record
  7682.  1Ah  8 BYTEs    (big-endian) logical unit name
  7683.  22h  8 BYTEs    (big-endian) logical unit ID
  7684.  2Ah    BYTE    logical unit local address
  7685.  2Bh    BYTE    logical unit session limit
  7686.  2Ch    DWORD    pointer to CREATE_TP_EXIT routine,
  7687.         FFFFFFFFh = reject incoming ALLOCATEs
  7688.         00000000h = queue ALLOCATEs
  7689.  30h    DWORD    00h
  7690.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  7691.  38h    DWORD    00h
  7692.  3Ch    BYTE    maximum TPs
  7693.  3Dh    BYTE    queue depth
  7694.  3Eh    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh=no pswd exit
  7695.  42h    DWORD    00h
  7696.  46h    WORD    total length of partner records
  7697.  48h    var    array of partner logical unit records (see below)
  7698.  
  7699. Format of partner logical unit record:
  7700. Offset    Size    Description
  7701.  00h    WORD    length of this partner logical unit record
  7702.  02h    WORD    42  offset to mode records
  7703.  04h  8 BYTEs    (big-endian) partner logical unit name
  7704.  0Ch    BYTE    partner logical unit security capabilities
  7705.         bit 7: already verified
  7706.         bit 6: conversation level security
  7707.         bit 5: session level security
  7708.  0Dh    BYTE    partner logical unit session limit
  7709.  0Eh    WORD    partner logical unit maximum MC_SEND_LL
  7710.  10h  8 BYTEs    (big-endian) partner logical unit DLC name
  7711.  18h    BYTE    partner logical unit adapter number
  7712.  19h 17 BYTEs    (counted string) partner logical unit adapter address
  7713.  2Ah    WORD    total length of mode records
  7714.  2Ch 16N BYTEs    array of mode records (see below)
  7715.  
  7716. Format of mode record:
  7717. Offset    Size    Description
  7718.  00h    WORD    16  length of this mode record
  7719.  02h  8 BYTEs    (big-endian) mode name
  7720.  0Ah    WORD    RU_SIZE high bound
  7721.  0Ch    WORD    RU_SIZE low bound
  7722.  0Eh    BYTE    mode maximum negotiable session limit
  7723.  0Fh    BYTE    pacing size for receive
  7724.  
  7725. Routines defined by LU_LU_PASSWORD_EXIT, CREATE_TP_EXIT, and SYSTEM_LOG_EXIT
  7726. pointers are called by pushing the DWORD pointer to the verb on the stack and
  7727. then performing a FAR call.
  7728.  
  7729. Format of ACCESS_LU_LU_PW verb:
  7730. Offset    Size    Description
  7731.  00h 12 BYTEs    reserved
  7732.  0Ch    WORD    1900h (verb "ACCESS_LU_LU_PW")
  7733.  0Eh  8 BYTEs    (big-endian) logical unit ID
  7734.  16h  8 BYTEs    (big-endian) logical unit name
  7735.  1Eh  8 BYTEs    (big-endian) partner logical unit name
  7736.  26h 17 BYTEs    (counted string) partner fully qualified logical unit name
  7737.  37h    BYTE    password available (0=no, 1=yes)
  7738.  38h  8 BYTEs    password
  7739.  
  7740. Format of CREATE_TP verb:
  7741. Offset    Size    Description
  7742.  00h 12 BYTEs    reserved
  7743.  0Ch    WORD    2300h (verb "CREATE_TP")
  7744.  0Eh  6 BYTEs    00h
  7745.  14h    DWORD    (big-endian) sense code (see below)
  7746.  18h  8 BYTEs    (big-endian) TP ID
  7747.  20h  8 BYTEs    (big-endian) logical unit ID
  7748.  28h    DWORD    (big-endian) conversation ID
  7749.  2Ch    BYTE    0 basic conversation, 1 mapped conversation
  7750.  2Dh    BYTE    0 no sync level, 1 confirm
  7751.  2Eh    BYTE    reserved
  7752.  2Fh 65 BYTEs    (counted string) transaction program name
  7753.  70h  6 BYTEs    00h
  7754.  76h    WORD    length of ERROR_LOG_DATA to return
  7755.  78h    DWORD    pointer to ERROR_LOG_DATA buffer
  7756.  7Ch  8 BYTEs    (big-endian) partner logical unit name
  7757.  84h 18 BYTEs    (counted string) partner fully qualified logical unit name
  7758.  96h  8 BYTEs    (big-endian) mode name
  7759.  9Eh 12 BYTEs    00h
  7760.  AAh 11 BYTEs    (counted string) password
  7761.  B5h 11 BYTEs    (counted string) user ID
  7762.  C0h    BYTE    0 verification should be performed
  7763.         1 already verified
  7764.  
  7765. Values for sense code:
  7766.  00000000h    Ok
  7767.  080F6051h    SECURITY_NOT_VALID
  7768.  084B6031h    TP_NOT_AVAIL_RETRY
  7769.  084C0000h    TP_NOT_AVAIL_NO_RETRY
  7770.  10086021h    TP_NAME_NOT_RECOGNIZED
  7771.  10086034h    CONVERSATION_TYPE_MISMATCH
  7772.  10086041h    SYNC_LEVEL_NOT_SUPPORTED
  7773.  
  7774. Format of SYSLOG verb:
  7775. Offset    Size    Description
  7776.  00h 12 BYTEs    reserved
  7777.  0Ch    WORD    2600h (verb "SYSLOG")
  7778.  0Eh 10 BYTEs    00h
  7779.  18h    WORD    (big-endian) type
  7780.  1Ah    DWORD    (big-endian) subtype
  7781.  1Eh    DWORD    pointer to ADDITIONAL_INFO
  7782.  22h    DWORD    (big-endian) conversation ID
  7783.  26h  8 BYTEs    (big-endian) TP ID
  7784.  2Eh  8 BYTEs    (big-endian) physical unit or logical unit name
  7785.  36h    WORD    length of data
  7786.  38h    DWORD    pointer to data
  7787.  3Ch    BYTE    00h
  7788. --------N-6801--SF2200-----------------------
  7789. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - DETACH LOGICAL UNIT
  7790.     AH = 01h subfn 2200h
  7791.     DS:DX -> control block
  7792. Return: control block updated
  7793. SeeAlso: AH=01h/SF=2000h,AH=01h/SF=2100h,AH=01h/SF=2700h
  7794.  
  7795. Format of control block:
  7796. Offset    Size    Description
  7797.  00h 12 BYTEs    reserved
  7798.  0Ch    WORD    2200h (verb "Detach Logical Unit")
  7799.  0Eh  6 BYTEs    00h
  7800.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  7801.  18h  8 BYTEs    (big-endian) logical unit ID
  7802.  20h    BYTE    00h
  7803. --------N-6801--SF2700-----------------------
  7804. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - DETACH PHYSICAL UNIT
  7805.     AH = 01h subfn 2700h
  7806.     DS:DX -> control block
  7807. Return: control block updated
  7808. SeeAlso: AH=01h/SF=2000h,AH=01h/SF=2100h,AH=01h/SF=2200h
  7809.  
  7810. Format of control block:
  7811. Offset    Size    Description
  7812.  00h 12 BYTEs    reserved
  7813.  0Ch    WORD    2700h (verb "Detach Physical Unit")
  7814.  0Eh  6 BYTEs    00h
  7815.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  7816.  18h    BYTE    00h  type: hard
  7817.         01h  type: soft
  7818. --------N-6801--SF2B00-----------------------
  7819. INT 68 - APPC/PC - NETWORK DEVICE CONTROL - ACTIVATE DLC
  7820.     AH = 01h subfn 2B00h
  7821.     DS:DX -> control block
  7822. Return: control block updated
  7823. SeeAlso: AH=01h/SF=1B00h,AH=01h/SF=2000h
  7824.  
  7825. Format of control block:
  7826. Offset    Size    Description
  7827.  00h 12 BYTEs    reserved
  7828.  0Ch    WORD    2B00h (verb "Activate DLC")
  7829.  0Eh  6 BYTEs    00h
  7830.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  7831.  18h  8 BYTEs    (big-endian) DLC name
  7832.  20h    BYTE    adapter number
  7833. --------N-6802--SF0100-----------------------
  7834. INT 68 - APPC/PC - CONNECTION CONTROL - ALLOCATE
  7835.     AH = 02h subfn 0100h
  7836.     DS:DX -> control block
  7837. Return: control block updated
  7838. SeeAlso: AH=02h/SF=0500h
  7839.  
  7840. Format of control block:
  7841. Offset    Size    Description
  7842.  00h 12 BYTEs    reserved
  7843.  0Ch    WORD    0100h (verb "Allocate" or "MC_Allocate")
  7844.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  7845.         0 if basic verb
  7846.  0Fh  5 BYTEs    reserved (0)
  7847.  14h    WORD    (big-endian) primary return code (see below)
  7848.  16h    DWORD    (big-endian) error code (see below)
  7849.  1Ah  8 BYTEs    (big-endian) TP_ID
  7850.  22h    DWORD    (big-endian) conversation ID
  7851.  26h    BYTE    (MC_Allocate only) 0 basic conversation
  7852.                    1 mapped conversation
  7853.  27h    BYTE    SYNC_LEVEL (00h none, 01h confirm)
  7854.  28h    WORD    0000h
  7855.  2Ah    BYTE    00h RETURN_CONTROL: when session allocated
  7856.         01h RETURN_CONTROL: immediate
  7857.         02h RETURN_CONTROL: when session free
  7858.  2Bh  8 BYTEs    00h
  7859.  33h  8 BYTEs    (big-endian) partner logical unit name
  7860.  3Bh  8 BYTEs    (big-endian) mode name
  7861.  43h 65 BYTEs    (counted string) TP name
  7862.  84h    BYTE    security (00h none, 01h same, 02h pgm)
  7863.  85h 11 BYTEs    00h
  7864.  90h 11 BYTEs    (counted string) password
  7865.  9Bh 11 BYTEs    (counted string) user ID
  7866.  A6h    WORD    PIP_DATA length
  7867.  A8h    DWORD    pointer to PIP_DATA
  7868.  
  7869. Values for primary return code:
  7870.  0000h    successful
  7871.  0001h    parameter check
  7872.  0002h    state check
  7873.  0003h    allocation error
  7874.  0005h    deallocate abended
  7875.  0006h    deallocate abended program
  7876.  0007h    deallocate abended SVC
  7877.  0008h    deallocate abended timer
  7878.  0009h    deallocate normal return
  7879.  000Ah    data posting blocked
  7880.  000Bh    posting not active
  7881.  000Ch    PROG_ERROR_NO_TRUNC
  7882.  000Dh    PROG_ERROR_TRUNC
  7883.  000Eh    PROG_ERROR_PURGING
  7884.  000Fh    CONV_FAILURE_RETRY
  7885.  0010h    CONV_FAILURE_NO_RETRY
  7886.  0011h    SVC_ERROR_NO_TRUNC
  7887.  0012h    SVC_ERROR_TRUNC
  7888.  0013h    SVC_ERROR_PURGING
  7889.  0014h    unsuccessful
  7890.  0018h    CNOS partner logical unit reject
  7891.  0019h    conversation type mixed
  7892.  F001h    APPC disabled
  7893.  F002h    APPC busy
  7894.  F003h    APPC abended
  7895.  F004h    incomplete
  7896.  
  7897. Values for error code:
  7898.  0001h    bad TP ID
  7899.  0002h    bad conversation ID
  7900.  0004h    allocation error, no retry
  7901.  0005h    allocation error, retry
  7902.  0006h    data area crosses segment boundary
  7903.  0010h    bad TPN length
  7904.  0011h    bad CONV length
  7905.  0012h    bad SYNC level
  7906.  0013h    bad security selection
  7907.  0014h    bad return control
  7908.  0015h    SEC_TOKENS too big
  7909.  0016h    PIP_LEN incorrect
  7910.  0017h    no use of SNASVCMG
  7911.  0018h    unknown partner mode
  7912.  0031h    confirm: SYNC_NONE
  7913.  0032h    confirm: bad state
  7914.  0033h    confirm: NOT_LL_BDY
  7915.  0041h    confirmed: bad state
  7916.  0051h    deallocate: bad type
  7917.  0052h    deallocate: flush bad state
  7918.  0053h    deallocate: confirm bad state
  7919.  0055h    deallocate: NOT_LL_BDY
  7920.  0057h    deallocate: log LL_WRONG
  7921.  0061h    flush: not send state
  7922.  0091h    post on receipt: invalid length
  7923.  0092h    post on receipt: not in receive state
  7924.  0093h    post on receipt: bad fill
  7925.  00A1h    prepare to receive:invalid type
  7926.  00A2h    prepare to receive: unfinished LL
  7927.  00A3h    prepare to receive: not in send state
  7928.  00B1h    receive and wait: bad state
  7929.  00B2h    receive and wait: NOT_LL_BDY
  7930.  00B5h    receive and wait: bad fill
  7931.  00C1h    receive immediate: not in receive state
  7932.  00C4h    receive immediate: bad fill
  7933.  00E1h    request to send: not in receive state
  7934.  00F1h    send data: bad LL
  7935.  00F2h    send data: not in send state
  7936.  0102h    send error: log LL wrong
  7937.  0103h    send error: bad type
  7938.  0121h    test: invalid type
  7939.  0122h    test: not in receive state
  7940. --------N-6802--SF0300-----------------------
  7941. INT 68 - APPC/PC - CONNECTION CONTROL - CONFIRM
  7942.     AH = 02h subfn 0300h
  7943.     DS:DX -> control block
  7944. Return: control block updated
  7945. SeeAlso: AH=02h/SF=0400h
  7946.  
  7947. Format of control block:
  7948. Offset    Size    Description
  7949.  00h 12 BYTEs    reserved
  7950.  0Ch    WORD    0300h (verb "Confirm" or "MC_Confirm")
  7951.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  7952.         0 if basic verb
  7953.  0Fh  5 BYTEs    reserved (0)
  7954.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  7955.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  7956.  1Ah  8 BYTEs    (big-endian) TP_ID
  7957.  22h    DWORD    (big-endian) conversation ID
  7958.  26h    BYTE    request to send received (0=no, 1=yes)
  7959. --------N-6802--SF0400-----------------------
  7960. INT 68 - APPC/PC - CONNECTION CONTROL - CONFIRMED
  7961.     AH = 02h subfn 0400h
  7962.     DS:DX -> control block
  7963. Return: control block updated
  7964. SeeAlso: AH=02h/SF=0300h
  7965.  
  7966. Format of control block:
  7967. Offset    Size    Description
  7968.  00h 12 BYTEs    reserved
  7969.  0Ch    WORD    0400h (verb "Confirmed" or "MC_Confirmed")
  7970.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  7971.         0 if basic verb
  7972.  0Fh  5 BYTEs    reserved (0)
  7973.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  7974.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  7975.  1Ah  8 BYTEs    (big-endian) TP_ID
  7976.  22h    DWORD    (big-endian) conversation ID
  7977. --------N-6802--SF0500-----------------------
  7978. INT 68 - APPC/PC - CONNECTION CONTROL - DEALLOCATE
  7979.     AH = 02h subfn 0500h
  7980.     DS:DX -> control block
  7981. Return: control block updated
  7982. SeeAlso: AH=02h/SF=0100h,AH=02h/SF=0300h
  7983.  
  7984. Format of control block:
  7985. Offset    Size    Description
  7986.  00h 12 BYTEs    reserved
  7987.  0Ch    WORD    0500h (verb "Deallocate" or "MC_Deallocate")
  7988.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  7989.         0 if basic verb
  7990.  0Fh  5 BYTEs    reserved (0)
  7991.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  7992.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  7993.  1Ah  8 BYTEs    (big-endian) TP_ID
  7994.  22h    DWORD    (big-endian) conversation ID
  7995.  26h    BYTE    00h
  7996.  27h    BYTE    type
  7997.         00h SYNC_LEVEL
  7998.         01h FLUSH
  7999.         02h ABEND_PROC
  8000.         03h ABEND_SVC
  8001.         04h ABEND_TIMER
  8002.         05h ABEND
  8003.  28h    WORD    (MC_Deallocate only) length of error log data
  8004.  2Ah    DWORD    (MC_Deallocate only) pointer to error log data
  8005. --------N-6802--SF0600-----------------------
  8006. INT 68 - APPC/PC - CONNECTION CONTROL - FLUSH
  8007.     AH = 02h subfn 0600h
  8008.     DS:DX -> control block
  8009. Return: control block updated
  8010. SeeAlso: AH=02h/SF=0300h
  8011.  
  8012. Format of control block:
  8013. Offset    Size    Description
  8014.  00h 12 BYTEs    reserved
  8015.  0Ch    WORD    0600h (verb "Flush" or "MC_Flush")
  8016.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8017.         0 if basic verb
  8018.  0Fh  5 BYTEs    reserved (0)
  8019.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8020.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8021.  1Ah  8 BYTEs    (big-endian) TP_ID
  8022.  22h    DWORD    (big-endian) conversation ID
  8023. --------N-6802--SF0700-----------------------
  8024. INT 68 - APPC/PC - CONNECTION CONTROL - GET ATTRIBUTES
  8025.     AH = 02h subfn 0700h
  8026.     DS:DX -> control block
  8027. Return: control block updated
  8028. SeeAlso: AH=02h/SF=0300h
  8029.  
  8030. Format of control block:
  8031. Offset    Size    Description
  8032.  00h 12 BYTEs    reserved
  8033.  0Ch    WORD    0700h (verb "Get_Attributes" or "MC_Get_Attributes")
  8034.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8035.         0 if basic verb
  8036.  0Fh  5 BYTEs    reserved (0)
  8037.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8038.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8039.  1Ah  8 BYTEs    (big-endian) TP_ID
  8040.  22h    DWORD    (big-endian) conversation ID
  8041.  26h  8 BYTEs    (big-endian) logical unit ID
  8042.  2Eh    BYTE    00h
  8043.  2Fh    BYTE    SYNC_LEVEL (0=none, 1=confirm)
  8044.  30h  8 BYTEs    (big-endian) mode name
  8045.  38h  8 BYTEs    (big-endian) own net name
  8046.  40h  8 BYTEs    (big-endian) own logical unit name
  8047.  48h  8 BYTEs    (big-endian) partner logical unit name
  8048.  50h 18 BYTEs    (counted string) partner's fully qualified logical unit name
  8049.  62h    BYTE    00h
  8050.  63h 11 BYTEs    (counted string) user ID
  8051. --------N-6802--SF0800-----------------------
  8052. INT 68 - APPC/PC - CONNECTION CONTROL - GET CONVERSATION TYPE
  8053.     AH = 02h subfn 0800h
  8054.     DS:DX -> control block
  8055. Return: control block updated
  8056. SeeAlso: AH=02h/SF=0300h
  8057.  
  8058. Format of control block:
  8059. Offset    Size    Description
  8060.  00h 12 BYTEs    reserved
  8061.  0Ch    WORD    0800h (verb "Get_Type")
  8062.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8063.         0 if basic verb
  8064.  0Fh  5 BYTEs    reserved (0)
  8065.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8066.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8067.  1Ah  8 BYTEs    (big-endian) TP_ID
  8068.  22h    DWORD    (big-endian) conversation ID
  8069.  26h    BYTE    (return) type (0=basic conversation, 1=mapped conversation)
  8070. --------N-6802--SF0900-----------------------
  8071. INT 68 - APPC/PC - CONNECTION CONTROL - POST ON RECEIPT
  8072.     AH = 02h subfn 0900h
  8073.     DS:DX -> control block
  8074. Return: control block updated
  8075. SeeAlso: AH=02h/SF=0A00h
  8076.  
  8077. Format of control block:
  8078. Offset    Size    Description
  8079.  00h 12 BYTEs    reserved
  8080.  0Ch    WORD    0900h (verb "Post_on_Receipt")
  8081.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8082.         0 if basic verb
  8083.  0Fh  5 BYTEs    reserved (0)
  8084.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8085.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8086.  1Ah  8 BYTEs    (big-endian) TP_ID
  8087.  22h    DWORD    (big-endian) conversation ID
  8088.  26h    WORD    maximum length
  8089.  28h    BYTE    fill (0=buffer, 1=LL)
  8090. --------N-6802--SF0A00-----------------------
  8091. INT 68 - APPC/PC - CONNECTION CONTROL - PREPARE TO RECEIVE
  8092.     AH = 02h subfn 0A00h
  8093.     DS:DX -> control block
  8094. Return: control block updated
  8095. SeeAlso: AH=02h/SF=0900h,AH=02h/SF=0B00h
  8096.  
  8097. Format of control block:
  8098. Offset    Size    Description
  8099.  00h 12 BYTEs    reserved
  8100.  0Ch    WORD    0A00h (verb "Prepare_to_Receive" or "MC_Prepare_to_Receive")
  8101.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8102.         0 if basic verb
  8103.  0Fh  5 BYTEs    reserved (0)
  8104.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8105.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8106.  1Ah  8 BYTEs    (big-endian) TP_ID
  8107.  22h    DWORD    (big-endian) conversation ID
  8108.  26h    BYTE    type (0=SYNC_LEVEL, 1=FLUSH)
  8109.  27h    BYTE    locks (0=short, 1=long)
  8110. --------N-6802--SF0B00-----------------------
  8111. INT 68 - APPC/PC - CONNECTION CONTROL - RECEIVE AND WAIT
  8112.     AH = 02h subfn 0B00h
  8113.     DS:DX -> control block
  8114. Return: control block updated
  8115. SeeAlso: AH=02h/SF=0C00h,AH=02h/SF=0F00h
  8116.  
  8117. Format of control block:
  8118. Offset    Size    Description
  8119.  00h 12 BYTEs    reserved
  8120.  0Ch    WORD    0B00h (verb "Receive_and_Wait" or "MC_Receive_and_Wait")
  8121.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8122.         0 if basic verb
  8123.  0Fh  5 BYTEs    reserved (0)
  8124.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8125.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8126.  1Ah  8 BYTEs    (big-endian) TP_ID
  8127.  22h    DWORD    (big-endian) conversation ID
  8128.  26h    BYTE    type of information received (see below)
  8129.  27h    BYTE    (MC_Receive_and_Wait only) fill (0=buffer, 1=LL)
  8130.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  8131.  29h    WORD    maximum length
  8132.  2Bh    WORD    data length
  8133.  2Dh    DWORD    pointer to data
  8134.  
  8135. Values for type of information received:
  8136.  00h    data
  8137.  01h    data complete
  8138.  02h    data incomplete
  8139.  03h    confirm
  8140.  04h    confirm send
  8141.  05h    confirm deallocate
  8142.  06h    send
  8143. --------N-6802--SF0C00-----------------------
  8144. INT 68 - APPC/PC - CONNECTION CONTROL - RECEIVE IMMEDIATE
  8145.     AH = 02h subfn 0C00h
  8146.     DS:DX -> control block
  8147. Return: control block updated
  8148. SeeAlso: AH=02h/SF=0B00h,AH=02h/SF=0F00h
  8149.  
  8150. Format of control block:
  8151. Offset    Size    Description
  8152.  00h 12 BYTEs    reserved
  8153.  0Ch    WORD    0C00h (verb "Receive_Immediate" or "MC_Receive_Immediate")
  8154.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8155.         0 if basic verb
  8156.  0Fh  5 BYTEs    reserved (0)
  8157.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8158.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8159.  1Ah  8 BYTEs    (big-endian) TP_ID
  8160.  22h    DWORD    (big-endian) conversation ID
  8161.  26h    BYTE    type of information received (see AH=02h/SF=0B00h)
  8162.  27h    BYTE    (MC_Receive_Immediate only) fill (0=buffer, 1=LL)
  8163.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  8164.  29h    WORD    maximum length
  8165.  2Bh    WORD    data length
  8166.  2Dh    DWORD    pointer to data
  8167. --------N-6802--SF0E00-----------------------
  8168. INT 68 - APPC/PC - CONNECTION CONTROL - REQUEST TO SEND
  8169.     AH = 02h subfn 0E00h
  8170.     DS:DX -> control block
  8171. Return: control block updated
  8172. SeeAlso: AH=02h/SF=0F00h,AH=02h/SF=1000h
  8173.  
  8174. Format of control block:
  8175. Offset    Size    Description
  8176.  00h 12 BYTEs    reserved
  8177.  0Ch    WORD    0E00h (verb "Request_to_Send" or "MC_Request_to_Send")
  8178.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8179.         0 if basic verb
  8180.  0Fh  5 BYTEs    reserved (0)
  8181.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8182.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8183.  1Ah  8 BYTEs    (big-endian) TP_ID
  8184.  22h    DWORD    (big-endian) conversation ID
  8185. --------N-6802--SF0F00-----------------------
  8186. INT 68 - APPC/PC - CONNECTION CONTROL - SEND DATA
  8187.     AH = 02h subfn 0F00h
  8188.     DS:DX -> control block
  8189. Return: control block updated
  8190. SeeAlso: AH=02h/SF=0E00h,AH=02h/SF=1000h
  8191.  
  8192. Format of control block:
  8193. Offset    Size    Description
  8194.  00h 12 BYTEs    reserved
  8195.  0Ch    WORD    0F00h (verb "Send_Data" or "MC_Send_Data")
  8196.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8197.         0 if basic verb
  8198.  0Fh  5 BYTEs    reserved (0)
  8199.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8200.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8201.  1Ah  8 BYTEs    (big-endian) TP_ID
  8202.  22h    DWORD    (big-endian) conversation ID
  8203.  26h    BYTE    request to send received (0=no, 1=yes)
  8204.  27h    BYTE    00h
  8205.  28h    WORD    data length
  8206.  2Ah    DWORD    pointer to data
  8207. --------N-6802--SF1000-----------------------
  8208. INT 68 - APPC/PC - CONNECTION CONTROL - SEND ERROR
  8209.     AH = 02h subfn 1000h
  8210.     DS:DX -> control block
  8211. Return: control block updated
  8212. SeeAlso: AH=02h/SF=0F00h
  8213.  
  8214. Format of control block:
  8215. Offset    Size    Description
  8216.  00h 12 BYTEs    reserved
  8217.  0Ch    WORD    1000h (verb "Send_Error" or "MC_Send_Error")
  8218.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8219.         0 if basic verb
  8220.  0Fh  5 BYTEs    reserved (0)
  8221.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8222.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8223.  1Ah  8 BYTEs    (big-endian) TP_ID
  8224.  22h    DWORD    (big-endian) conversation ID
  8225.  26h    BYTE    request to send received (0=no, 1=yes)
  8226.  27h    BYTE    type (0=program, 1=SVC)
  8227.  28h    DWORD    00h
  8228.  2Ch    WORD    (MC_Send_Error only) LOG_DATA length
  8229.  2Eh    DWORD    (MC_Send_Error only) pointer to LOG_DATA
  8230. --------N-6802--SF1200-----------------------
  8231. INT 68 - APPC/PC - CONNECTION CONTROL - TEST
  8232.     AH = 02h subfn 1200h
  8233.     DS:DX -> control block
  8234. Return: control block updated
  8235. SeeAlso: AH=02h/SF=1300h
  8236.  
  8237. Format of control block:
  8238. Offset    Size    Description
  8239.  00h 12 BYTEs    reserved
  8240.  0Ch    WORD    1200h (verb "Test" or "MC_Test")
  8241.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8242.         0 if basic verb
  8243.  0Fh  5 BYTEs    reserved (0)
  8244.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8245.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8246.  1Ah  8 BYTEs    (big-endian) TP_ID
  8247.  22h    DWORD    (big-endian) conversation ID
  8248.  26h    BYTE    (MC_Test only) test (0=posted, 1=request_to_send received)
  8249.         Note: error code has different interpretations for:
  8250.             0 posted data
  8251.             1 posted not data (primary return code = 0)
  8252.             1 bad TP_ID (primary return code = 1)
  8253. --------N-6802--SF1300-----------------------
  8254. INT 68 - APPC/PC - CONNECTION CONTROL - WAIT
  8255.     AH = 02h subfn 1300h
  8256.     DS:DX -> control block
  8257. Return: control block updated
  8258. SeeAlso: AH=02h/SF=1200h
  8259.  
  8260. Format of control block:
  8261. Offset    Size    Description
  8262.  00h 12 BYTEs    reserved
  8263.  0Ch    WORD    1300h (verb "Wait")
  8264.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  8265.         0 if basic verb
  8266.  0Fh  5 BYTEs    reserved (0)
  8267.  14h    WORD    (big-endian) primary return code (see AH=02h/SF=0100h)
  8268.  16h    DWORD    (big-endian) error code (see AH=02h/SF=0100h)
  8269.  1Ah  8 BYTEs    (big-endian) TP_ID
  8270.  22h    DWORD    (big-endian) conversation ID
  8271.  26h    BYTE    number of conversations to wait on
  8272.         Note: error codes have interpretations as for AH=02h/SF=1200h
  8273. --------N-6803--SF2400-----------------------
  8274. INT 68 - APPC/PC - TP STARTED
  8275.     AH = 03h subfn 2400h
  8276.     DS:DX -> control block (see below)
  8277. Return: control block updated
  8278.  
  8279. Format of control block:
  8280. Offset    Size    Description
  8281.  00h 12 BYTEs    reserved
  8282.  0Ch    WORD    2400h (verb "TP Started")
  8283.  0Eh  6 BYTEs    00h
  8284.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  8285.  18h    WORD    00h
  8286.  1Ah  8 BYTEs    (big-endian) logical unit ID
  8287.  22h  8 BYTEs    (big-endian) TP ID
  8288. --------N-6803--SF2800-----------------------
  8289. INT 68 - APPC/PC - GET ALLOCATE
  8290.     AH = 03h subfn 2800h
  8291.     DS:DX -> control block (see below)
  8292. Return: control block updated
  8293.  
  8294. Format of control block:
  8295. Offset    Size    Description
  8296.  00h 12 BYTEs    reserved
  8297.  0Ch    WORD    2800h (verb "Get ALLOCATE")
  8298.  0Eh  6 BYTEs    00h
  8299.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  8300.  18h    WORD    00h
  8301.  1Ah  8 BYTEs    (big-endian) logical unit ID
  8302.  22h    BYTE    type (00h dequeue, 01h test)
  8303.  23h    DWORD    pointer to CREATE_TP record
  8304. --------N-6803--SF2A00-----------------------
  8305. INT 68 - APPC/PC - CHANGE LOGICAL UNIT
  8306.     AH = 03h subfn 2A00h
  8307.     DS:DX -> control block (see below)
  8308. Return: control block updated
  8309.  
  8310. Format of control block:
  8311. Offset    Size    Description
  8312.  00h 12 BYTEs    reserved
  8313.  0Ch    WORD    2A00h (verb "Change Logical Unit")
  8314.  0Eh  6 BYTEs    00h
  8315.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  8316.  18h    WORD    00h
  8317.  1Ah  8 BYTEs    (big-endian) logical unit ID
  8318.  22h    DWORD    pointer to CREATE_TP_EXIT routine
  8319.         FFFFFFFFh reject incoming ALLOCATEs
  8320.         00000000h queue ALLOCATEs
  8321.  26h    DWORD    00000000h
  8322.  2Ah    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh= don't log errors
  8323.  2Eh    DWORD    00000000h
  8324.  32h    BYTE    maximum TPs
  8325.  33h    BYTE    00h stop QUEUE_ALLOCATEs
  8326.         01h resume QUEUE_ALLOCATEs
  8327.  34h    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh = no exit
  8328.  38h    DWORD    00000000h
  8329. --------N-6804-------------------------------
  8330. INT 68 - APPC/PC - TRANSACTION PROCESSING
  8331.     AH = 04h
  8332.     DS:DX -> control block (see below)
  8333. Return: control block updated
  8334.  
  8335. Format of control block:
  8336. Offset    Size    Description
  8337.  00h 12 BYTEs    reserved
  8338.  0Ch    WORD    verb (action)
  8339.         2500h TP_ENDED
  8340.         2900h TP_VALID
  8341.  0Eh  6 BYTEs    00h
  8342.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  8343.  18h    WORD    00h
  8344.  1Ah  8 BYTEs    (big-endian) TP_ID
  8345.  22h    DWORD    -> CREATE_TP record (only if verb = 2900h)
  8346. --------N-6805-------------------------------
  8347. INT 68 - APPC/PC - TRANSFER MESSAGE DATA
  8348.     AH = 05h
  8349.     DS:DX -> control block (see below)
  8350. Return: control block updated
  8351.  
  8352. Format of control block:
  8353. Offset    Size    Description
  8354.  00h 12 BYTEs    reserved
  8355.  0Ch    WORD    1C00h (verb "Transfer Message Data")
  8356.  0Eh    BYTE    00h user defined
  8357.         01h NMVT
  8358.         02h alert subvectors
  8359.         03h PDSTATS subvectors
  8360.  0Fh  5 BYTEs    00h
  8361.  14h    DWORD    (big-endian) return code (see AH=01h/SF=1B00h)
  8362.  18h 12 BYTEs    00h
  8363.  24h    BYTE    if bit 0 clear, add correlation subvector
  8364.         if bit 1 clear, add product set ID subvector
  8365.         if bit 2 clear, do SYSLOG
  8366.         if bit 3 clear, send SSCP_PU_SESSION
  8367.  25h    BYTE    00h
  8368.  26h    WORD    length of data
  8369.  28h  N BYTEs    data
  8370. --------N-6806-------------------------------
  8371. INT 68 - APPC/PC - CHANGE NUMBER OF SESSIONS
  8372.     AH = 06h
  8373.     DS:DX -> control block (see below)
  8374. Return: control block updated
  8375.  
  8376. Format of control block:
  8377. Offset    Size    Description
  8378.  00h 12 BYTEs    reserved
  8379.  0Ch    WORD    1500h (verb "Change Number of Sessions")
  8380.  0Eh  6 BYTEs    00h
  8381.  14h    WORD    (big-endian) primary return code (see AH=02h)
  8382.  16h    DWORD    (big-endian) secondary return code (see below, AH=01h/SF=1B00h)
  8383.  1Ah  8 BYTEs    (big-endian) logical unit ID
  8384.  22h  8 BYTEs    blanks
  8385.  2Ah  8 BYTEs    (big-endian) partner logical unit name
  8386.  32h  8 BYTEs    (big-endian) mode name
  8387.  3Ah    BYTE    bit 7: use MODE_NAME_SELECT_ALL rather than MODE_NAME
  8388.         bit 6: set negotiable values
  8389.  3Bh    BYTE    partner logical unit mode session limit
  8390.  3Ch    BYTE    minimum CONWINNERS_SOURCE
  8391.  3Dh    BYTE    maximum CONWINNERS_TARGET
  8392.  3Eh    BYTE    automatic activation
  8393.  3Fh    BYTE    00h
  8394.  40h    BYTE    bit 7: drain target
  8395.         bit 6: drain source
  8396.         bit 5: target responsible, not source
  8397.  
  8398. Values for secondary return code (see also AH=01h/SF=1B00h):
  8399.  0000h    accepted
  8400.  0001h    negotiated
  8401.  0003h    bad logical unit ID
  8402.  0004h    allocation failure, no retry
  8403.  0005h    allocation failure, retry
  8404.  0151h    can't raise limits
  8405.  0153h    all modes must reset
  8406.  0154h    bad SNASVCMG limits
  8407.  0155h    minimum greater than total
  8408.  0156h    mode closed (primary return code = 1)
  8409.     CNOS mode closed (primary return code = 18h)
  8410.  0157h    bad mode name (primary return code = 1)
  8411.     CNOS bad mode name (primary return code = 18h)
  8412.  0159h    reset SNA drains
  8413.  015Ah    single not SRC response
  8414.  015Bh    bad partner logical unit
  8415.  015Ch    exceeds maximum allowed
  8416.  015Dh    change SRC drains
  8417.  015Eh    logical unit detached
  8418.  015Fh    CNOS command race reject
  8419. --------N-6807-------------------------------
  8420. INT 68 - APPC/PC - PASSTHROUGH
  8421.     AH = 07h
  8422.     DS:DX -> control block (format depends on application subsystem)
  8423. Return: control block updated
  8424. SeeAlso: AH=FFh
  8425. ----------6847-------------------------------
  8426. INT 68 - MS Windows debugging kernel - OUTPUT STRING
  8427.     AH = 47h
  8428.     ES:SI -> string
  8429. Notes:    output a string (to inform a debugger of some events)
  8430.     KERNEL outputs "Windows Kernel Entry\r\n" on startup
  8431. SeeAlso: INT 41/AX=0012h
  8432. --------N-68FA-------------------------------
  8433. INT 68 - APPC/PC - ENABLE/DISABLE APPC
  8434.     AH = FAh
  8435.     AL bit 0 = 0 enable
  8436.            1 disable
  8437. SeeAlso: AH=FDh
  8438. --------N-68FB-------------------------------
  8439. INT 68 - APPC/PC - CONVERT
  8440.     AH = FBh
  8441.     DS:DX -> control block (see below)
  8442. Return: control block updated
  8443.  
  8444. Format of control block:
  8445. Offset    Size    Description
  8446.  00h 12 BYTEs    reserved
  8447.  0Ch    WORD    1A00h (verb "CONVERT")
  8448.  0Eh  6 BYTEs    00h
  8449.  14h    DWORD    (big-endian) return code
  8450.  18h    BYTE    conversion
  8451.         00h ASCII to EBCDIC
  8452.         01h EBCDIC to ASCII
  8453.  19h    BYTE    character set
  8454.         00h AE
  8455.         01h A
  8456.         02h G
  8457.  1Ah    WORD    length of string to convert
  8458.  1Ch    DWORD    pointer to source
  8459.  20h    DWORD    pointer to target
  8460. --------N-68FC-------------------------------
  8461. INT 68 - APPC/PC - ENABLE/DISABLE MESSAGE TRACING
  8462.     AH = FCh
  8463.     AL = 00h disable tracing
  8464.        = 01h enable tracing
  8465.         DX = number of bytes to keep (0=all)
  8466. SeeAlso: AH=FDh,AH=FEh
  8467. --------N-68FD-------------------------------
  8468. INT 68 - APPC/PC - ENABLE/DISABLE API VERB TRACING
  8469.     AH = FDh
  8470.     AL = 00h disable tracing
  8471.          01h enable tracing
  8472. SeeAlso: AH=FAh,AH=FCh,AH=FEh
  8473. --------N-68FE-------------------------------
  8474. INT 68 - APPC/PC - SET TRACE DESTINATION
  8475.     AH = FEh
  8476.     AL = trace destinations (see below)
  8477.     DS:DX -> trace stats record if AL bit 0 set
  8478. SeeAlso: AH=FCh,AH=FDh
  8479.  
  8480. Bitfields for trace destinations:
  8481.  bit 0    storage (DS:DX -> trace stats record)
  8482.  bit 1    display
  8483.  bit 2    file (trace written to file OUTPUT.PC)
  8484.  bit 3    printer
  8485.  
  8486. Format of Trace Statistics Record:
  8487. Offset    Size    Description
  8488.  00h    DWORD    pointer to storage trace buffer
  8489.  04h    WORD    max number of 80-byte records in trace
  8490.  06h    WORD    (high-order byte first!) current record number (must init to 0)
  8491.  08h    DWORD    (high-order byte first!) number of records written (init to 0)
  8492.  0Ch    DWORD    reserved
  8493. Note:    do not move record while trace is active
  8494. --------N-68FF-------------------------------
  8495. INT 68 - APPC/PC - SET PASSTHROUGH
  8496.     AH = FFh
  8497.     DS:DX -> passthrough exit routine
  8498. SeeAlso: AH=07h
  8499. --------!------------------------------------
  8500.